You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何我的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:39:23