tutorial searchcontroller bar ios objective-c uitableview uisearchbar uisearchdisplaycontroller
Proyecto Demo

ios - searchcontroller - ¿Cómo uso UISearchBar y UISearchDisplayController?



uisearchcontroller swift 4 (2)

Tengo una aplicación que muestra bastantes datos en una UITableView . Ya agregué UISearchBar y UISearchDisplayController en Interface Builder a UITableView . Pero no sé cómo usarlo. Si alguien pudiera proporcionar una solución rápida a esto, estaría agradecido. Solo necesito que funcione mientras escribe para encontrar coincidencias de la consulta de búsqueda en las celdas UITableView (o de una matriz).

ACTUALIZACIÓN 1 : Aquí está el código del método numberOfRowsInSection :

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { if (isSearching) { return [searchResults count]; } else { if (section == 0) { return 1; } else if (section == 1) { return [basicQuantities count]; } else if (section == 2) { return [physicalQuantities count]; } } return nil; }



  • Primero agregue el UISearchDisplayController a su vista de tabla
  • Luego configura su delegado.
  • Implementa los siguientes métodos.

Proyecto Demo

En tu archivo .h

@interface ViewController : UIViewController <UITableViewDelegate, UITableViewDataSource> { NSMutableArray *contentList; NSMutableArray *filteredContentList; BOOL isSearching; } @property (strong, nonatomic) IBOutlet UITableView *tblContentList; @property (strong, nonatomic) IBOutlet UISearchBar *searchBar; @property (strong, nonatomic) IBOutlet UISearchDisplayController *searchBarController;

En su archivo .m

Rellenar los datos de muestra (solo opcional para el propósito de la demostración)

- (void)viewDidLoad { [super viewDidLoad]; contentList = [[NSMutableArray alloc] initWithObjects:@"iPhone", @"iPod", @"iPod touch", @"iMac", @"Mac Pro", @"iBook",@"MacBook", @"MacBook Pro", @"PowerBook", nil]; filteredContentList = [[NSMutableArray alloc] init]; }

Ahora implemente el delegado y el origen de datos de la vista de tabla

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { // Return the number of sections. return 1; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { // Return the number of rows in the section. if (isSearching) { return [filteredContentList count]; } else { return [contentList count]; } } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"Cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; } // Configure the cell... if (isSearching) { cell.textLabel.text = [filteredContentList objectAtIndex:indexPath.row]; } else { cell.textLabel.text = [contentList objectAtIndex:indexPath.row]; } return cell; }

Función de búsqueda responsable de la búsqueda

- (void)searchTableList { NSString *searchString = searchBar.text; for (NSString *tempStr in contentList) { NSComparisonResult result = [tempStr compare:searchString options:(NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch) range:NSMakeRange(0, [searchString length])]; if (result == NSOrderedSame) { [filteredContentList addObject:tempStr]; } } }

Implementación de barra de búsqueda

- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar { isSearching = YES; } - (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText { NSLog(@"Text change - %d",isSearching); //Remove all objects first. [filteredContentList removeAllObjects]; if([searchText length] != 0) { isSearching = YES; [self searchTableList]; } else { isSearching = NO; } // [self.tblContentList reloadData]; } - (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar { NSLog(@"Cancel clicked"); } - (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar { NSLog(@"Search Clicked"); [self searchTableList]; }