2015-07-07 2 views
1

Я пытаюсь добавить поисковую панель в свой просмотр коллекции, чтобы он исчез, когда пользователь просматривает просмотр коллекции, чтобы просмотреть ячейку и изображения.Searchbar subview в делегате UICollectionView

Я могу добавить SearchBar без каких-либо проблем, но когда я пытаюсь подключить делегат, я получаю аварию:

-[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 

Я попытался изменить имена классов, потому что сначала это была searchba r.searchbar.delegate = self, и я думал, что это могло вызвать некоторые проблемы, но это не помогло. Я попытался подключить делегата к строке поиска в моем OKSearchBarPhotoGalleryViewCell, но я все равно получил тот же крах.

ответ

0

Хорошо, у меня есть еще один способ, более простой один ..

Шаг 1) Добавить делегат для вашего Tableview-х прокрутки scrollViewDidScroll.

шаг 2) Теперь получить прокручивается вниз или прокручивается вверх путем сравнения lastScrollContentOffeset (CGFloat) с scrollView.contentOffset.y

Also update lastSCrollContentOffeset = scrollView.contentOffset.y; 

Шаг 3) Теперь, в зависимости от Scrollup ИЛИ Прокрутите вниз, показать/скрыть поле Текст или другого вида по как требуется ...

Примечание. Вы также можете оживить отображение/скрытие перехода вашего представления.

Важно. Если вы добавляете панель поиска поверх представления коллекции, то добавьте функцию TopConstraint для коллекцииView. Измените это ограничение при показе/скрытии вида

Это рабочее решение.

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; 
} 
Смежные вопросы