我有一个tableview
,用于显示我的应用程序中的设备列表。当调用viewWillAppear时,我添加了self.searchDisplayController.searchBar as a subview to a headerView
。然后,我分配self.tableView.tableHeaderView = headerView
。看起来像这样:
我向下滚动tableview,以便headerview不在 View 中,然后通过点击一个单元格转到其他 View Controller 。当我回到此tableView时,向上滚动到headerView,searchBar变为不可见,但是在不可见区域上点击时,searchDisplayController会被激活,并且cancel按钮不起作用。这仅适用于iOS 7。为什么会这样呢?
注意:仅当我返回tableViewController时,只有headerView不在 View 中时,才会发生这种情况。
最佳答案
我刚遇到同样的问题。当我在结束搜索状态下调试UISearchDisplayController的委托(delegate)方法时,searchBar成为UIView的 subview ,而不是UITableView。请参见下面的代码:
- (void)searchDisplayControllerDidEndSearch:(UISearchDisplayController *)controller
{
//My Solution: remove the searchBar away from current super view,
//then add it as subview again to the tableView
UISearchBar *searchBar = controller.searchBar;
UIView *superView = searchBar.superview;
if (![superView isKindOfClass:[UITableView class]]) {
NSLog(@"Error here");
[searchBar removeFromSuperview];
[self.tableView addSubview:searchBar];
}
NSLog(@"%@", NSStringFromClass([superView class]));
}
我的解决方案是从当前的 super View 中删除searchBar,然后将其作为 subview 再次添加到tableView中。我已经测试成功了。
希望对您有所帮助!
问候