3

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

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

但是在集合视图中,不存在与表格视图执行相同的方法。所以我添加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 次。太糟糕了。

我认为这是因为警告而发生的。我搜索了警告上下文,并找到了与此相关的唯一一篇关于 stackoverflow 的文章。(其他文章与表格视图有关。所有这些似乎都通过使用来修复setTableHeaderView。)

文章是这样的。

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

4

2 回答 2

2

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

if(activeSearch && ![searchBar isFirstResponder])
{
    [searchBar becomeFirstResponder];
}
于 2013-05-03T20:04:54.077 回答
0
This is  happening  because reloadData will also reloading the header. 

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

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

于 2013-01-26T16:22:38.040 回答