我正在尝试将搜索栏添加到我的集合视图中,以便当用户向下滑动集合视图以查看单元格和图像时它会消失。
我可以毫无问题地添加搜索栏,但是当我尝试连接代理时,我遇到了崩溃:
-[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中的搜索栏,但我仍然收到同样的崩溃。
答案 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。在显示/隐藏视图的
时修改此约束这是有效的解决方案。