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 находится над заголовком. Любая идея, как поставить его над заголовком? Зеленый цвет – это заголовок.

Панель поиска через Headerview

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)]; 
  • Как реализовать UIPageViewController, который использует несколько ViewControllers
  • Программно вызывать раскадровку в делегате
  • edgeForExtendedLayout игнорируется на iOS9 при использовании пользовательской анимации
  • Панель навигации iOS VS UIToolBar
  • Как я могу реализовать делегирование для контроллера представления, представленного segue?
  • Как вызвать метод из ViewController в GameScene
  • Можно ли использовать переходы iOS 7 UIViewController (интерактивно) с контроллерами дочерних элементов?
  • AdLovin Banner Ad Crash на iPad
  • Обнаруживать, когда UIViewController больше не представляет контроллер представления
  • Установить ориентацию на UIViewController
  • Программный интерфейс: не вызывайте super.loadView, но вызывайте super.viewDidLoad?
  • Interesting Posts

    Почему расширение WatchKit вызывает сообщение «Ожидание прикрепить» на фактическом Apple Watch, но не в симуляторе?

    Создать светящийся текстовый эффект на iOS

    Есть ли простой способ (в Cocoa / iOS) поставить очередь вызова метода для запуска один раз в следующем цикле запуска?

    iOS Obj-C. Правильное решение?

    Выполнение скриншотов в фоновом режиме (iOS) – повышение производительности

    Установите IPA с помощью iTunes 12.7

    iOS округлый угол UIImage с рамкой

    Анимированное содержимое UIView, не получающее сенсорные события

    Ошибка: использование неразрешенного идентификатора «ParseClientConfiguration»

    Отображение нескольких ресурсов из одного объекта ObjectManager в RestKit

    Получить ссылку Bundle из Path in Swift

    программно включить "не беспокоить"

    Событие iOS Safari onscroll внутри вложенного элемента

    Ошибки полупрозрачности UIAlertController / ошибка

    UIWebView просачивается при отображении больших PDF-файлов на iPad

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.