UICollectionview, реализующий поиск
У меня есть UICollectionview
встроенный в UIViewController
. Кроме того, я добавил строку поиска в UIViewController, как в UICollectionview. Я не знаю, куда ее можно понести через Storyboard. Я ожидал, что поиск в UICollectionview
будет таким же простым, как в Tableview
. Но у него, похоже, есть свои правила. Есть ли хороший и простой пример, показывающий, как реализовать простой поиск в UICollectionview
например, в UITableview
? Я хочу добиться, чтобы пользователь мог вводить строку поиска, а UICollectionview
отображает результаты. Я нашел решение для реализации searchbar
:
- (void)viewDidLoad { [super viewDidLoad]; self.searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, CGRectGetWidth(self.collectionView.frame), 44)]; self.searchBar.autocorrectionType = UITextAutocorrectionTypeNo; self.searchBar.delegate = self; [self.collectionView addSubview:self.searchBar]; [self.collectionView setContentOffset:CGPointMake(0, 44)]; } - (void) viewWillAppear:(BOOL)animated{ // to show search bar [self.collectionView setContentOffset:CGPointMake(0, 0)]; // to hide search bar [self.collectionView setContentOffset:CGPointMake(0, 44)]; } -(void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar { [searchBar setShowsCancelButton:YES animated:YES]; } -(void)searchBarCancelButtonClicked:(UISearchBar *)searchBar { [searchBar setText:@""]; [searchBar setShowsCancelButton:NO animated:YES]; [searchBar resignFirstResponder]; }
Это отлично работает, и он отображает searchbar
которая является хорошим началом, но теперь я больше не вижу свой заголовок, потому что searchbar
находится над заголовком. Любая идея, как поставить его над заголовком? Зеленый цвет – это заголовок.
- iOS Swift: UIViewControllerAnimatedTransitioning конечный кадр в неправильном положении
- Сбой приложения при создании экземпляра контроллера просмотра из раскадровки
- iPhone X скрыть домашний индикатор на контроллере просмотра
- Как сделать данные видимыми для всех контроллеров представлений?
- OCMock и UIViewController
- проверить текущий контроллер просмотра на экране в ios
- UIViewController Animation ios?
- почему мой UIView subview не является рендерингом внутри родителя? (код прилагается)
- Бесконечная прокрутка по таблицеView, размещенная внутри UIViewController в Swift
- Как поделиться рекламным баннером iAd через просмотр?
- Семантическая проблема с несвязанным объектом в Objective-C
- Кнопка Click Click UICollectionViewCell Ширина и изменение высоты
- Выполнить код перед инициализацией контроллера First View (приложение на основе раскадровки)
4 Solutions collect form web for “UICollectionview, реализующий поиск”
То, как я это сделал в своем приложении, – это установить верхние вставки контента в 44, что является высотой по умолчанию UISearchBar в моей ViewDidLoa:
[self.collectionView setContentInset:UIEdgeInsetsMake(44, 0, 0, 0)];
и затем я добавляю UISearchBar и устанавливаю, что Y указывает на -44 и 44 для высоты.
UISearchBar *searchBar = [[UISearchBar alloc]initWithFrame:CGRectMake(0, -44, self.view.frame.size.width, 44.0)]; [self.collectionView addSubview:searchBar];
Один из способов сделать это – добавить панель поиска в виде заголовка представления коллекции. Используйте - (UICollectionReusableView *)collectionView: (UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath
метод - (UICollectionReusableView *)collectionView: (UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath
.
Образец кода –
- (UICollectionReusableView *)collectionView: (UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath { //Custom class for the header view. Controls are defined in the Storyboard HeaderView *headerView = [collectionView dequeueReusableSupplementaryViewOfKind: UICollectionElementKindSectionHeader withReuseIdentifier:@"HeaderView" forIndexPath:indexPath]; /* // Header view customization code */ [headerView.filterButton setImage: [[UIImage imageNamed:@"ButtonImage.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate] forState:UIControlStateNormal]; CGFloat spacing = 5; // the amount of spacing to appear between image and title headerView.filterButton.imageEdgeInsets = UIEdgeInsetsMake(0, 0, 0, spacing); headerView.filterButton.titleEdgeInsets = UIEdgeInsetsMake(5, spacing, 0, 0); NSString *buttonTitle = @"Button Title"; [headerView.filterButton setTitle:buttonTitle forState:UIControlStateNormal]; headerView.backgroundColor = [UIColor redColor]; /* // Add the Search Bar */ UISearchBar *searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, CGRectGetWidth(headerView.frame), 44)]; searchBar.autocorrectionType = UITextAutocorrectionTypeNo; searchBar.delegate = self; [headerView addSubview:searchBar]; return headerView; }
Попробуйте вставить секцию в свою коллекцию. Предполагая, что вы используете раскладку потока, вызовите
[(UICollectionViewFlowLayout *)self.collectionView.collectionViewLayout setSectionInset:UIEdgeInsetsMake(64,0,0,0)];
in viewDidLoad
.
Или вы можете реализовать этот метод делегата раскладки потока UICollectionViewDelegateFlowLayout
,
- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section { return UIEdgeInsetsMake(64,0,0,0); }
для лучшего контроля.
Удалите CGRectGetWidth(self.collectionView.frame)
и установите ручную ширину, а затем ее мелко перестройте вместе с ней. И только. В конечном итоге уж уж уж collectionView.frame
self.searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(2, 10, 70, 44)];