搜索栏没有收到触摸

Posted

技术标签:

【中文标题】搜索栏没有收到触摸【英文标题】:Search Bar does not receive touches 【发布时间】:2015-08-05 06:46:22 【问题描述】:

我实现了一个搜索栏,它“粘”在 tableView 上。现在,tableView 开始滚动后,searchBar 不会收到触摸并成为第一响应者,相反,它后面的单元格会这样做并导航到下一个视图。我该怎么做才能让 searchBar 收到触摸?

保持静态的代码:

-(void)scrollViewDidScroll:(UIScrollView *)scrollView 

    UISearchBar *searchBar = self.search;
    [[self.tableView.tableHeaderView superview] bringSubviewToFront:self.tableView.tableHeaderView];
    CGRect searchBarFrame = searchBar.frame;
    if (self.inSearchMode)
    

        searchBarFrame.origin.y = 0;
    
    else
    

        searchBarFrame.origin.y = MAX(0, scrollView.contentOffset.y + scrollView.contentInset.top);
    

    self.search.frame = searchBarFrame;

【问题讨论】:

可以发截图吗?一件事情记得当 UISearchBar 是 tableHeaderView 时,直接在 -scrollViewDidScroll 中操作它的框架:适用于 ios 5.x 但不适用于 iOS 6。要使其正常工作,您需要将搜索栏包装在一个普通的 UIView 中并添加作为表头。 我已经将它包装在一个 UiView 中,然后将其设置为 tableHeaderView 尝试设置一次以代替您的代码。 UISearchBar *searchBar = searchDisplayController.searchBar; CGRect rect = searchBar.frame; rect.origin.y = MIN(0, scrollView.contentOffset.y); searchBar.frame = rect; 试过了。 searchBar 现在在滚动时消失了 你还需要实现搜索显示控制器委托方法。 - (void)searchDisplayControllerWillBeginSearch:(UISearchDisplayController *)controller -(void)searchDisplayControllerWillEndSearch:(UISearchDisplayController *)controller 【参考方案1】:

如果您考虑一下,当您滚动时,表格标题框架将超出表格边界。 尝试将其作为子视图直接添加到 tableView 并设置其相对于 tableView 边界的框架以保持粘性。

【讨论】:

@sam24 你介意在这里发布一些代码吗?遇到同样的问题,还在苦苦挣扎。谢谢。 如果您使用 tableview.frame 到 tableview.bounds。这应该够了吧。这就是我所做的一切。

以上是关于搜索栏没有收到触摸的主要内容,如果未能解决你的问题,请参考以下文章

UIScrollView 底部的 UIButtons 没有收到触摸

UITabBarController 中的 UISearchController 没有响应触摸

触摸 UISearchbar 时如何修复偏移键盘

iOS 11 中的 SearchController。无法触摸任何 tableView 单元格

UISearchController:searchBar 和 scopeBar 在第一次触摸事件上重叠

UIScrollView 内的 UIView 没有收到触摸事件