【发布时间】:2021-04-27 02:00:46
【问题描述】:
基本上,我在 TableViewController 中有以下代码,除了一些额外的行之外,它基本上在另一个 CollectionViewController 中重复:
func configureSearchController() {
searchController.obscuresBackgroundDuringPresentation = false
searchController.searchBar.placeholder = "Search Albums"
navigationItem.searchController = searchController
navigationItem.hidesSearchBarWhenScrolling = false
definesPresentationContext = true
searchController.searchBar.delegate = self
}
为了清理我的两个控制器中的代码,我想将这些方法移动到一个新文件中,如下所示:
class SearchBarManager: UIViewController {
func configureAlbumSearchController(_ searchController: UISearchController, _ navigationItem: UINavigationItem) {
searchController.obscuresBackgroundDuringPresentation = false
searchController.searchBar.placeholder = "Search Albums"
navigationItem.searchController = searchController
navigationItem.hidesSearchBarWhenScrolling = false
definesPresentationContext = true
}
func configurePhotoSearchController(_ searchController: UISearchController, _ navigationItem: UINavigationItem) {
searchController.obscuresBackgroundDuringPresentation = false
searchController.searchBar.placeholder = "Search Photos"
navigationItem.searchController = searchController
navigationItem.hidesSearchBarWhenScrolling = false
definesPresentationContext = true
searchController.searchBar.scopeButtonTitles = ["1 Column", "2 Columns", "3 Columns"]
searchController.searchBar.selectedScopeButtonIndex = 2
}}
这是正确的方法吗?我觉得有一种更简单的方法可以简化我想要完成的工作,但我不确定。提前致谢!
【问题讨论】:
-
不,您的示例代码没有意义。为什么 SearchBarManager 是 UIViewController 的子类?为什么这两种方法重复前 5 行?子类 UINavigationItem 并实现执行这五个操作的方法。
configurePhotoSearchController中的最后两行似乎完全是特定的两个“PhotoSearchController”,因此它们应该进入该控制器。
标签: swift model-view-controller uisearchcontroller