如何解决此警告:设置集合视图的第一响应者视图但我们不知道其类型(单元格/页眉/页脚)?

Posted

技术标签:

【中文标题】如何解决此警告:设置集合视图的第一响应者视图但我们不知道其类型(单元格/页眉/页脚)?【英文标题】:How can I fix this warning: setting the first responder view of the collection view but we don't know its type (cell/header/footer)? 【发布时间】:2013-01-26 16:04:42 【问题描述】:

我正在尝试将搜索栏添加到我的收藏视图。我要实现的是使用- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText 方法过滤数据。

当我使用表格视图时一切正常。在表格视图中,当我使用addSubView 方法添加UISearchBar 时,我得到了几乎相同的警告,但是当我使用setTableHeaderView 方法添加UISearchBar 时它消失了。

但在collection view中,不存在与table view执行相同的方法。所以我在补充标题视图中添加了UISearchBar,如下所示:

- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath

    UICollectionReusableView *reusableView;
    if (kind == UICollectionElementKindSectionHeader) 
        reusableView = [collectionView dequeueReusableSupplementaryViewOfKind:kind withReuseIdentifier:@"HeaderView" forIndexPath:indexPath];
        [reusableView addSubview:self.searchBar];
    
    return reusableView;

当我通过这种方式添加UISearchBar 对象时,我收到警告,“设置集合视图的第一响应者视图但我们不知道它的类型(单元格/页眉/页脚)?”每次我点击搜索栏。

除了警告之外,它似乎工作正常,但是当我输入某些内容时,我遇到了问题。如果我输入一个字母,键盘输入视图就会下降,所以我必须再次点击搜索栏才能继续搜索。如果我要搜索的单词是 5 个字母的单词,我必须点击搜索栏 4 次。太可怕了。

我认为这是由于警告而发生的。我搜索了警告上下文,并找到了与此相关的唯一一篇关于 *** 的文章。 (其他文章和table view有关,好像都用setTableHeaderView修复了。)

文章是this。

但是我没有注册 ios 开发者计划,所以我看不懂那篇文章。有没有人愿意帮我解决这个问题?,

【问题讨论】:

【参考方案1】:

发生这种情况是因为在集合视图上调用“reloadData”时重新加载了标题视图,因此搜索栏失去了它的第一响应者状态。我能找到的唯一解决方法是在进行活动搜索时保留一个 BOOL,如果是,则在 collectionviews“cellForItemAtIndexPath”中将搜索栏设置为 firstResponder:

if(activeSearch && ![searchBar isFirstResponder])

    [searchBar becomeFirstResponder];

【讨论】:

【参考方案2】:
This is  happening  because reloadData will also reloading the header. 

即您的旧标题将从集合视图中删除,排队并 在你的数据源实现时重用

不要担心这个警告。你可以忽略这个警告

【讨论】:

那如何解决输入一个字母后键盘输入自动下线的问题呢?当我将搜索栏直接添加到视图中时,并没有发生该问题,但这样我就无法使用我想要的布局...... 根据您的回答,我猜是由于 textDidChange 中的 reloadData 而出现问题。我猜当我输入一个字母时,标题视图包含出列和排队的搜索栏,所以键盘输入下降...... 有没有其他方法可以在集合视图中包含搜索栏,以便搜索栏上升并最终在我向下滚动时隐藏? 可能有办法解决这个问题,但到目前为止我还没有研究过这个 我解决了问题this way。我发现这种方式和设置tableHeaderView只有一个区别,就是滚动条在搜索栏后面。

以上是关于如何解决此警告:设置集合视图的第一响应者视图但我们不知道其类型(单元格/页眉/页脚)?的主要内容,如果未能解决你的问题,请参考以下文章

UITextField 没有成为集合视图中的第一响应者

在集合视图中为单元格设置动画

如果集合视图嵌入到 ios 的表视图中,如何始终显示集合视图的第一项

辞去 ScrollView Touch 上的第一响应者

如何设置第一响应者?

如何解决此错误“警告:尝试呈现其视图不在窗口层次结构中”?