UITableView重新出现后,UISearchBar无法成为第一响应者

时间:2014-12-12 19:50:41

标签: xcode uisearchbar becomefirstresponder

我有一个适用于iOS8的iPhone应用程序。 UIPageViewController有一个UITableViewController的子视图,这就是我放UISearchController的地方。

第一次出现UITableViewController时,我可以通过

激活搜索
[self.searchController.searchBar becomeFirstResponder];

但是,一旦视图控制器通过推送到另一个表视图控制器或模态呈现UIViewController(在视觉上屏蔽它)而变得不可见,则searchBar在重新出现后不再能成为第一响应者。

搜索本身可以通过

完成
 [self.searchController setActive:YES];

但是,这种方式没有插入符号(用户必须点击searchBar才能开始输入)。

我有几乎相同的UITableViewController与UISearchController没有事件。所以,我必须遗漏一些东西,但我希望你的意见是我应该注意解决这个问题的方向。

以下是我设置搜索控制器的方法。

 @interface MonthTableViewController () <UISearchResultsUpdating, UISearchControllerDelegate>

 @property (nonatomic, strong) UISearchController *searchController;

 UITableViewController *searchController = [[UITableViewController alloc]initWithStyle:UITableViewStylePlain];
 searchController.tableView.dataSource = self;
 searchController.tableView.delegate = self;
 self.searchController = [[UISearchController alloc] initWithSearchResultsController:searchController];
 self.searchController.searchResultsUpdater = self;
 self.searchController.delegate = self;
 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;
 self.definesPresentationContext = YES;

 // Hide search bar
 CGRect myBounds = self.tableView.bounds;
 myBounds.origin.y += self.searchController.searchBar.frame.size.height;
 _lastlyAddedTableBoundY = self.searchController.searchBar.frame.size.height;
 self.tableView.bounds = myBounds;

1 个答案:

答案 0 :(得分:1)

我通过Xcode > Product > Analyze解决了这个问题。

我只是忘了添加

[super viewWillAppear:(BOOL)animated];

在相应的-(void)ViewWillAppear:(BOOL)animated上的UITableViewController内。

希望我的错误可以在将来挽救某人的时间。