在我的项目中,如果第二次将控制器(包含UISearchController)推送到导航堆栈,搜索栏似乎无法获得焦点。以下GIF重新编码演示了我所说的内容:
正如您所看到的,当搜索屏幕第二次被推到导航堆栈时(通过点击放大镜),我无法再点击搜索栏。
重现问题的代码:如果您想查看代码,可以download the minimal project。
答案 0 :(得分:3)
您需要设置UISearchControllerDelegate
class SearchController: UITableViewController, UISearchControllerDelegate, UISearchBarDelegate {
override func viewDidLoad() {
super.viewDidLoad()
searchController = UISearchController(searchResultsController: nil)
searchController.delegate = self
searchController.searchBar.delegate = self
self.definesPresentationContext = false
}
故事板中的还需要将“显示推送”中的segue更改为“显示替换”
或者使用扩展程序,但酷孩子现在正在这样做。
答案 1 :(得分:0)
尝试一下
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
self.definesPresentationContext = YES;
}
- (void)viewDidDisappear:(BOOL)animated {
self.definesPresentationContext = NO;
[super viewDidDisappear:animated];
}
对我来说很好,但是不确定是否是一个好的解决方案?