TableViewController mit 'gefüllter' SearchBar aufrufen und direkt das gefilterte array anzeigen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • TableViewController mit 'gefüllter' SearchBar aufrufen und direkt das gefilterte array anzeigen

    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:

    Quellcode

    1. #import "OrderListTableViewController.h"
    2. #import "OrderInfo.h"
    3. #import "OrderDetailsTableViewController.h"
    4. @interface OrderListTableViewController () <UISearchDisplayDelegate, UISearchBarDelegate>
    5. @property (strong, nonatomic) NSArray *filteredOrderInfoArray;
    6. @property (nonatomic, strong) UISearchBar *searchBar;
    7. @property (nonatomic, strong) UISearchDisplayController *searchDisplayController;
    8. @end
    9. @implementation OrderListTableViewController
    10. @synthesize searchOrderString;
    11. @synthesize searchDisplayController;
    12. #pragma mark View
    13. - (void)viewDidLoad
    14. {
    15. [super viewDidLoad];
    16. // init searchBar
    17. self.searchBar = [[UISearchBar alloc] init];
    18. self.searchBar.delegate = self;
    19. self.searchDisplayController = [[UISearchDisplayController alloc] initWithSearchBar:self.searchBar contentsController:self];
    20. self.searchDisplayController.searchResultsDelegate = self;
    21. self.searchDisplayController.searchResultsDataSource = self;
    22. self.searchDisplayController.delegate = self;
    23. [self.searchBar sizeToFit];
    24. self.tableView.tableHeaderView = self.searchBar;
    25. if(![self.searchOrderString isEqualToString:@""])
    26. {
    27. [self.searchBar setText: self.searchOrderString]; // <== hier wird der String zum Filtern gesetzt.
    28. }
    29. }
    30. - (void) viewWillDisappear:(BOOL)animated
    31. {
    32. [super viewWillDisappear:animated];
    33. }
    34. - (void) viewWillAppear:(BOOL)animated
    35. {
    36. [super viewWillAppear:animated];
    37. }
    38. #pragma mark Search Delegate
    39. -(BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString
    40. {
    41. [self filterContentForSearchText:searchString];
    42. return YES;
    43. }
    44. #pragma mark Methods
    45. -(void)searchBarSearchButtonClicked:(UISearchBar *)searchBar
    46. { // nothing to do in the moment
    47. }
    48. - (void)filterContentForSearchText: (NSString *) searchText
    49. {
    50. SingletonCenter *singletonData = [SingletonCenter sharedSingleton];
    51. NSPredicate *resultPredicate = [NSPredicate predicateWithFormat:@"SEARCHKEY CONTAINS[cd] %@", searchText];
    52. self.filteredOrderInfoArray = [singletonData.orderInfoArray filteredArrayUsingPredicate:resultPredicate];
    53. }
    54. #pragma mark - Table view data source
    55. - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
    56. {
    57. // Return the number of sections.
    58. if (tableView == self.tableView) {
    59. return 1;
    60. }
    61. else {
    62. return 1;
    63. }
    64. }
    65. - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
    66. {
    67. // Return the number of rows in the section.
    68. SingletonCenter *singletonData = [SingletonCenter sharedSingleton];
    69. if (tableView == self.tableView) {
    70. return [singletonData.orderInfoArray count];
    71. }
    72. else {
    73. return [self.filteredOrderInfoArray count];
    74. }
    75. }
    76. - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
    77. {
    78. if (tableView == self.tableView) {
    79. return 40;
    80. }
    81. else {
    82. return 40;
    83. }
    84. }
    85. - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    86. {
    87. static NSString *CellIdentifier = @"Zelle";
    88. UITableViewCell *cell;
    89. SingletonCenter *singletonData = [SingletonCenter sharedSingleton];
    90. NSMutableDictionary *orderInfoDictionary = [NSMutableDictionary new];
    91. OrderInfo *orderInfo = [[OrderInfo alloc] init];
    92. if (tableView == self.tableView) {
    93. cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
    94. if (cell == nil) {
    95. cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    96. }
    97. }
    98. else {
    99. cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    100. if (cell == nil) {
    101. cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    102. }
    103. }
    104. if (tableView == self.tableView) {
    105. orderInfoDictionary = [singletonData.orderInfoArray objectAtIndex:indexPath.row];
    106. }
    107. else {
    108. orderInfoDictionary = [self.filteredOrderInfoArray objectAtIndex:indexPath.row];
    109. }
    110. orderInfo = [orderInfoDictionary objectForKey:@"ORDERINFO"];
    111. // Configure the cell
    112. cell.textLabel.text = [[NSString alloc] initWithFormat:@"%@", [orderInfo.orderNumber stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]];
    113. return cell;
    114. }
    115. - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
    116. {
    117. // open order details
    118. SingletonCenter *singletonData = [SingletonCenter sharedSingleton];
    119. OrderDetailsTableViewController *controller = [self.storyboard instantiateViewControllerWithIdentifier:@"OrderDetailsTableViewController"];
    120. if ([self.searchDisplayController isActive]) {
    121. controller.orderInfoDictionary = [self.filteredOrderInfoArray objectAtIndex:indexPath.row];
    122. }
    123. else {
    124. controller.orderInfoDictionary = [singletonData.orderInfoArray objectAtIndex:indexPath.row];
    125. }
    126. [self.navigationController pushViewController:controller animated:YES];
    127. }
    128. #pragma mark Autorotate
    129. - (BOOL) shouldAutorotate
    130. {
    131. return YES;
    132. }
    133. -(NSUInteger)supportedInterfaceOrientations
    134. {
    135. // Return YES for supported orientations
    136. if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
    137. return UIInterfaceOrientationMaskAllButUpsideDown;
    138. } else {
    139. return UIInterfaceOrientationMaskAll;
    140. }
    141. }
    142. @end
    Alles anzeigen
  • @MacMoonShine: Danke für deinen Tipp. Zusammen mit dieser Änderung ging es:

    Quellcode

    1. if(![self.searchOrderString isEqualToString:@""])
    2. {
    3. [self.searchDisplayController setActive:YES animated:YES];
    4. [self.searchBar becomeFirstResponder];
    5. [self.searchBar setText: self.searchOrderString];
    6. }


    :D