Hallo Forum,
ich suche eine Lösung für folgendes Problem:
Meine App zeigt einen TableViewController an, der dabei über ein Property einen String übergeben bekommt. Dieser String wird direkt über viewDidLoad in die SearchBar geschrieben. Nun soll direkt der Filter mit diesem String greifen und der TableView nur noch das gefilterte Array anzeigen.
Leider bekomme ich dies nicht hin.
Der String wird zwar in die SearchBar gesetz, aber der Aufruf/Event zum Filtern finde ich nicht....
Danke schon jetzt für jeden Tipp!!!
Ich hoffe, der folgender Quellcode hilft:
Alles anzeigen
ich suche eine Lösung für folgendes Problem:
Meine App zeigt einen TableViewController an, der dabei über ein Property einen String übergeben bekommt. Dieser String wird direkt über viewDidLoad in die SearchBar geschrieben. Nun soll direkt der Filter mit diesem String greifen und der TableView nur noch das gefilterte Array anzeigen.
Leider bekomme ich dies nicht hin.
Der String wird zwar in die SearchBar gesetz, aber der Aufruf/Event zum Filtern finde ich nicht....
Danke schon jetzt für jeden Tipp!!!
Ich hoffe, der folgender Quellcode hilft:
Quellcode
- #import "OrderListTableViewController.h"
- #import "OrderInfo.h"
- #import "OrderDetailsTableViewController.h"
- @interface OrderListTableViewController () <UISearchDisplayDelegate, UISearchBarDelegate>
- @property (strong, nonatomic) NSArray *filteredOrderInfoArray;
- @property (nonatomic, strong) UISearchBar *searchBar;
- @property (nonatomic, strong) UISearchDisplayController *searchDisplayController;
- @end
- @implementation OrderListTableViewController
- @synthesize searchOrderString;
- @synthesize searchDisplayController;
- #pragma mark View
- - (void)viewDidLoad
- {
- [super viewDidLoad];
- // init searchBar
- self.searchBar = [[UISearchBar alloc] init];
- self.searchBar.delegate = self;
- self.searchDisplayController = [[UISearchDisplayController alloc] initWithSearchBar:self.searchBar contentsController:self];
- self.searchDisplayController.searchResultsDelegate = self;
- self.searchDisplayController.searchResultsDataSource = self;
- self.searchDisplayController.delegate = self;
- [self.searchBar sizeToFit];
- self.tableView.tableHeaderView = self.searchBar;
- if(![self.searchOrderString isEqualToString:@""])
- {
- [self.searchBar setText: self.searchOrderString]; // <== hier wird der String zum Filtern gesetzt.
- }
- }
- - (void) viewWillDisappear:(BOOL)animated
- {
- [super viewWillDisappear:animated];
- }
- - (void) viewWillAppear:(BOOL)animated
- {
- [super viewWillAppear:animated];
- }
- #pragma mark Search Delegate
- -(BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString
- {
- [self filterContentForSearchText:searchString];
- return YES;
- }
- #pragma mark Methods
- -(void)searchBarSearchButtonClicked:(UISearchBar *)searchBar
- { // nothing to do in the moment
- }
- - (void)filterContentForSearchText: (NSString *) searchText
- {
- SingletonCenter *singletonData = [SingletonCenter sharedSingleton];
- NSPredicate *resultPredicate = [NSPredicate predicateWithFormat:@"SEARCHKEY CONTAINS[cd] %@", searchText];
- self.filteredOrderInfoArray = [singletonData.orderInfoArray filteredArrayUsingPredicate:resultPredicate];
- }
- #pragma mark - Table view data source
- - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
- {
- // Return the number of sections.
- if (tableView == self.tableView) {
- return 1;
- }
- else {
- return 1;
- }
- }
- - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
- {
- // Return the number of rows in the section.
- SingletonCenter *singletonData = [SingletonCenter sharedSingleton];
- if (tableView == self.tableView) {
- return [singletonData.orderInfoArray count];
- }
- else {
- return [self.filteredOrderInfoArray count];
- }
- }
- - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
- {
- if (tableView == self.tableView) {
- return 40;
- }
- else {
- return 40;
- }
- }
- - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
- {
- static NSString *CellIdentifier = @"Zelle";
- UITableViewCell *cell;
- SingletonCenter *singletonData = [SingletonCenter sharedSingleton];
- NSMutableDictionary *orderInfoDictionary = [NSMutableDictionary new];
- OrderInfo *orderInfo = [[OrderInfo alloc] init];
- if (tableView == self.tableView) {
- cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
- if (cell == nil) {
- cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
- }
- }
- else {
- cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier];
- if (cell == nil) {
- cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
- }
- }
- if (tableView == self.tableView) {
- orderInfoDictionary = [singletonData.orderInfoArray objectAtIndex:indexPath.row];
- }
- else {
- orderInfoDictionary = [self.filteredOrderInfoArray objectAtIndex:indexPath.row];
- }
- orderInfo = [orderInfoDictionary objectForKey:@"ORDERINFO"];
- // Configure the cell
- cell.textLabel.text = [[NSString alloc] initWithFormat:@"%@", [orderInfo.orderNumber stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]];
- return cell;
- }
- - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
- {
- // open order details
- SingletonCenter *singletonData = [SingletonCenter sharedSingleton];
- OrderDetailsTableViewController *controller = [self.storyboard instantiateViewControllerWithIdentifier:@"OrderDetailsTableViewController"];
- if ([self.searchDisplayController isActive]) {
- controller.orderInfoDictionary = [self.filteredOrderInfoArray objectAtIndex:indexPath.row];
- }
- else {
- controller.orderInfoDictionary = [singletonData.orderInfoArray objectAtIndex:indexPath.row];
- }
- [self.navigationController pushViewController:controller animated:YES];
- }
- #pragma mark Autorotate
- - (BOOL) shouldAutorotate
- {
- return YES;
- }
- -(NSUInteger)supportedInterfaceOrientations
- {
- // Return YES for supported orientations
- if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
- return UIInterfaceOrientationMaskAllButUpsideDown;
- } else {
- return UIInterfaceOrientationMaskAll;
- }
- }
- @end