didselectitem did ios uitableview uisearchbar uisearchdisplaycontroller uicollectionview

ios - did - ¿Cómo puedo usar UISearchDisplayController con UICollectionViewController?



uicollectionview swift 4 (3)

Acabo de recibir la misma consulta y se me ocurrió una solución a medio hacer pero que funciona y que no implica volver a escribir UISearchDisplayController.

(RESULTADO FINAL: Un UITableView - que responde a debería Recargar la TablaCuadroSuscarEcilla de Búsqueda-- superpuesto sobre el UICollectionView, una vez que haga clic en buscar se descarte, y sus resultados se encuentran en el CollectionView. Lea esto si es de su interés)

En el IB, se creó un UIViewController en el que inserté (ver captura de pantalla): una vista con fines de diseño -> en la que primero solté una barra UISearch y un controlador de pantalla. En la misma vista (lado a lado) solté un UICollectionView con un UICollectionViewCell personalizado. Luego coloqué un UITableViewProvider (con un UITableCell personalizado, pero eso no es necesario, también puedes ignorar el UITabBarItem y el elemento de navegación en la captura de pantalla, eso no tiene importancia)

Puse la altura del UITableView en 0, y conecté todos los Outlets y delegados, y el resultado neto es el siguiente: cuando el cursor ingresa en el UISearchBox, el UITableView superpuesto en el UICollectionView, como uno de los tipos que debería llamar ReloadTableForSearchString del los resultados aparecen en el tableView; En searchBarSearchButtonClicked simplemente configuré la fuente de datos de UICollectionView y llamé a reloadData en su outlet, et Voila.

Uno podría pensar que Apple debería generar el controlador de visualización de búsqueda; Tal vez en un futuro lanzamiento?

(Esto funciona porque esa es la forma en que se optimiza el controlador UISearchDisplay, IIRC en realidad hay una UITableView por entrada de carácter apilada una encima de la otra)

(No está publicando el código porque hay un poco involucrado; por favor pregunte si algo no es sencillo)

Si usa un UISearchDisplayController con un UITableViewController, cuando el usuario toca la barra de búsqueda, se anima para reemplazar la barra de navegación.

Me gustaría obtener el mismo efecto al usar una barra UISearch en la parte superior de un UICollectionViewController. ¿Algunas ideas?


Aquí solo un código rápido, ¡funcionó para mí!

func collectionView(collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, atIndexPath indexPath: NSIndexPath) -> UICollectionReusableView { let headerView = self.mainPictureCollectionView.dequeueReusableSupplementaryViewOfKind(kind, withReuseIdentifier: "headerView", forIndexPath: indexPath) headerView.addSubview(searchBar) return headerView }


Tuve que agregar la barra de búsqueda programáticamente como una subvista de UICollectionReusableView, nunca pude hacer que funcionara a través de IB ya que seguí recibiendo un error de prototipo al asignar una salida. Agregar la barra de búsqueda en el archivo de implementación funcionó para mí.

Los métodos relevantes son los siguientes.

-(void)viewDidLoad { [super viewDidLoad]; [self.collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:CellIdentifier]; _objectChanges = [NSMutableArray array]; _sectionChanges = [NSMutableArray array]; [self performFetch]; searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0.0, 50.0, self.view.bounds.size.width, 44.0)]; searchBar.placeholder = @"Search for channels"; searchBar.tintColor = [UIColor blackColor]; searchBar.delegate = self; } -(UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath { SupplementaryView *header = nil; if ([kind isEqual:UICollectionElementKindSectionHeader]) { header = [self.collectionView dequeueReusableSupplementaryViewOfKind:kind withReuseIdentifier:@"reuseHeader" forIndexPath:indexPath]; [header addSubview:searchBar]; } return header; }