为何我的UISearchController代理方法未被调用?
UISearchController 实现代码整理
我来帮你把这段iOS搜索控制器的代码整理成规范格式,方便后续调试和维护:
类扩展与协议声明
首先是类扩展部分,你已经正确添加了搜索相关的三个核心协议,这样你的控制器就能处理搜索相关的各类回调:
@interface DiscoverNew() <UISearchResultsUpdating, UISearchBarDelegate, UISearchControllerDelegate> @end
视图加载与搜索控制器配置
在viewDidLoad中调用配置方法,初始化并设置搜索控制器的基础属性:
- (void)viewDidLoad { [super viewDidLoad]; // 别忘了调用父类方法 [self configureSearchController]; } - (void)configureSearchController { // 初始化并对搜索控制器执行最低限度配置。 UISearchController *searchController = self.searchController; searchController = [[UISearchController alloc] initWithSearchResultsController:nil]; // 这里可以继续补充常用配置,比如: // searchController.searchResultsUpdater = self; // searchController.searchBar.delegate = self; // searchController.delegate = self; // searchController.obscuresBackgroundDuringPresentation = NO; // self.navigationItem.searchController = searchController; // self.definesPresentationContext = YES; }
小说明
传nil给initWithSearchResultsController:意味着当前DiscoverNew控制器会直接展示搜索结果,不需要单独的结果页面控制器。你添加的三个协议分工明确:
UISearchResultsUpdating:监听搜索框内容变化,实时更新搜索结果UISearchBarDelegate:处理搜索栏的点击、输入完成等交互事件UISearchControllerDelegate:处理搜索控制器的弹出、消失等生命周期事件
内容的提问来源于stack exchange,提问作者Austin Berenyi
相关产品推荐
相关产品推荐

