我有一个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中。我已经测试成功了。
希望对您有所帮助!

问候

10-08 05:57
查看更多