gpt4 book ai didi

ios - 无法将 searchBar 设置为 firstResponder

转载 作者:IT老高 更新时间:2023-10-28 11:39:38 27 4
gpt4 key购买 nike

我在 tableviewcontroller 中设置了一个 searchBar。我引用了这个类似的问题 UISearchBar cannot become first responder after UITableView did re-appear但我仍然无法将其设置为第一响应者。在 .h 文件中:

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

查看didload:

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;

在 viewDidAppear 中:

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

当我转到 View 时,searchBar 动画,但没有出现键盘。

最佳答案

我也注意到了这个问题。似乎发生的是对 becomeFirstResponder 的调用是在 searchController 仍在“加载”时完成的。如果您注释掉 becomeFirstResponder 您会注意到没有区别。所以我们需要一种在 searchController 加载完成后调用 becomeFirstResponder 的方法。

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

- (void)didPresentSearchController:(UISearchController *)searchController

这个方法在 searchController 出现后立即被调用。然后我调用 becomeFirstResponder:

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

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

关于ios - 无法将 searchBar 设置为 firstResponder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27951965/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com