UICollectionView委托中的搜索栏子视图

时间:2015-07-07 21:39:25

标签: ios objective-c iphone uicollectionview

我正在尝试将搜索栏添加到我的集合视图中,以便当用户向下滑动集合视图以查看单元格和图像时它会消失。

我可以毫无问题地添加搜索栏,但是当我尝试连接代理时,我遇到了崩溃:

 -[UICollectionReusableView searchBar]: unrecognized selector sent to instance 0x7fb30bc627f0
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UICollectionReusableView searchBar]: unrecognized selector sent to instance 0x7fb30bc627f0'

我的第一个视图的界面,主视图的类看起来像:

@interface OKPhotoGalleryViewController()

以下是我的viewDidLoad方法的一些代码:

[self.flickrCollectionView registerNib:[UINib nibWithNibName:NSStringFromClass([OKSearchBarPhotoGalleryViewCell class]) bundle:nil] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"SearchBar"];

    UISearchBar *searchBar;
    [self.flickrCollectionView addSubview:searchBar];

这是我需要的viewForSupplementaryElementOfKind方法:

- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath{
    static NSString *searchBarIdentifier = @"SearchBar";
    OKSearchBarPhotoGalleryViewCell *collectionViewSearchBar = (OKSearchBarPhotoGalleryViewCell *)[collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:searchBarIdentifier forIndexPath:indexPath];

    collectionViewSearchBar.searchBar.delegate = self;

    return collectionViewSearchBar;
}

我的应用程序崩溃了

collectionViewSearchBar.searchBar.delegate = self;
我正在实例化并在我的UICollectionView中添加为子视图的

和我的类'标题看起来像:

@interface OKSearchBarPhotoGalleryViewCell : UICollectionReusableView

@property (nonatomic, strong) IBOutlet UISearchBar *searchBar;

@end

我尝试更改类名,因为起初它是searchbar.searchbar.delegate = self,我认为这可能会导致一些问题,但它没有帮助。我试图将代理连接到我的OKSearchBarPhotoGalleryViewCell中的搜索栏,但我仍然收到同样的崩溃。

2 个答案:

答案 0 :(得分:1)

我昨晚解决了这个问题,创建了一个搜索栏,将其放在正确的位置,挂钩代表然后将其添加到我的子视图中。像魅力一样工作,所有searchBar委托方法都正确地向我发送消息。

    - (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath
{
    static NSString *searchBarIdentifier = @"SearchBar";
    OKSearchBarPhotoGalleryViewCell *collectionViewSearchBar = (OKSearchBarPhotoGalleryViewCell *)[collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:searchBarIdentifier forIndexPath:indexPath];

    UISearchBar *searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, CGRectGetWidth(collectionView.frame), 44)];
    searchBar.autocorrectionType = UITextAutocorrectionTypeNo;
    searchBar.delegate = self;

    [collectionViewSearchBar addSubview:searchBar];
    return collectionViewSearchBar;
}

答案 1 :(得分:0)

好的,我有另一种方式,更简单的方式..

步骤1)为tableView的滚动scrollViewDidScroll添加委托。

步骤2)现在通过比较lastScrollContentOffeset(CGFloat)和scrollView.contentOffset.y

来向上滚动或向上滚动
   Also update lastSCrollContentOffeset = scrollView.contentOffset.y;

步骤3)现在,根据ScrollUP或ScrollDown,根据需要显示/隐藏文本字段或其他视图......

请注意。您还可以动画显示/隐藏视图的转换。

重要。如果要在Collection View的顶部添加搜索栏,则为collectionView添加TopConstraint。在显示/隐藏视图的

时修改此约束

这是有效的解决方案。