我在tableviewcontroller中设置了一个搜索栏.我引用了类似的问题UISearchBar cannot become first responder after UITableView did re-appear,但仍然无法将其设置为第一响应者.

@property (strong, nonatomic) UISearchController *searchController;
@property (strong, nonatomic) IBOutlet UISearchBar *searchBar;

鉴于此:

self.searchController = [[UISearchController alloc]initWithSearchResultsController:nil];
self.searchController.searchResultsUpdater = self;
self.searchController.dimsBackgroundDuringPresentation = NO;
self.searchController.hidesNavigationBarDuringPresentation = NO;

self.searchController.searchBar.frame = CGRectMake(self.searchController.searchBar.frame.origin.x, self.searchController.searchBar.frame.origin.y, self.searchController.searchBar.frame.size.width, 44.0);
self.tableView.tableHeaderView = self.searchController.searchBar;

在视图中出现:

-(void)viewDidAppear:(BOOL)animated {
  [self.searchController setActive:YES];
  [self.searchController.searchBar becomeFirstResponder];
  [super viewDidAppear:animated];
}

当我转到视图时,搜索栏会显示动画,但不会显示键盘.

推荐答案

我也注意到了这个问题.似乎是在searchController仍在"加载"时调用becomeFirstResponder.如果你把becomeFirstResponder条注释掉,你会发现没有区别.所以我们需要一种在searchController"完成"加载后调用becomeFirstResponder的方法.

当我查看各种委托方法时,我注意到有一种委托方法:

- (void)didPresentSearchController:(UISearchController *)searchController

这个方法在searchController出现后立即调用.然后我打电话给becomeFirstResponder:

- (void)didPresentSearchController:(UISearchController *)searchController
{
    [searchController.searchBar becomeFirstResponder];
}

这就解决了问题.您会注意到,当加载searchController时,搜索栏现在有了焦点.

Objective-c相关问答推荐

警告:格式字符串不是字符串文字(可能不安全)

Objective-c 点表示法或方括号表示法中首选什么?

如何在没有 Interface Builder 的情况下创建 Cocoa 接口?

如何可靠地检测 iOS 9 上是否连接了外部键盘?

如何从 Appdelegate 显示 UIAlertController

如何使用键值编码判断对象是否存在键?

lldb 无法打印变量值并显示错误:对 'id' 的引用不明确

iOS NSLayoutConstraint 使用 constraintWithItem 固定宽度

Objective-C - 何时使用touch

具有多个嵌入 segues 的 ContainerView

AdMob 因 [GADObjectPrivate changeState:] 崩溃:无法识别的 Select 器

如何在 Cocoa 中获取 NSArray 的第一个 x 元素?

Objective-c 中 SEL 类型的属性

如何修复UIPopoverController 已弃用警告?

iOS ScrollView 需要约束 y 位置或高度

iOS 7 中的 UITextView 链接检测

iPhone SDK:如何在视图中播放视频?而不是全屏

请求访问相机胶卷的权限

如何阻止 NSNotification 中的观察者调用两次?

如何将 printf 与 NSString 一起使用