Текст UISearchBar не обновляет список имен файлов - PullRequest
0 голосов
/ 28 апреля 2020

В моем классе для моего TableView я заполняю строки именами всех файлов в данной папке моего приложения. Я только что изменил его на UISearchBar, и у меня возникли некоторые проблемы с моей логикой c. Появляется строка поиска, но вид таблицы просто становится пустым.

В моем файле .h у меня есть:

 @interface DevoSongs : UIViewController <UITableViewDataSource, UITableViewDelegate, UISearchBarDelegate, UISearchResultsUpdating >{
        NSArray *files;
        NSIndexPath *thepath;
        NSString *filenames;
        NSArray *try2;
        NSMutableArray *searchResults;
        NSString *savedSearchTerm;
        IBOutlet UITableView *tableView;


        }
        @property (nonatomic, retain) UITableView *tableView;
    @property (strong, nonatomic) UISearchController *searchController;


    @property (nonatomic, retain) NSArray *files;
    @property (nonatomic, retain) NSString *filenames;
    @property (nonatomic, retain) NSIndexPath *thepath;
    @property (nonatomic, retain) NSArray *try2;

    @property (nonatomic, retain) NSMutableArray *searchResults;
    @property (nonatomic, copy) NSString *savedSearchTerm;
    - (void)handleSearchForTerm:(NSString *)searchTerm;
    @end

For my implementation:

-(void)viewDidLoad {
    [super viewDidLoad];
    self.searchController = [[UISearchController alloc]
     initWithSearchResultsController:nil];
    self.searchController.searchResultsUpdater = self;
    self.searchController.dimsBackgroundDuringPresentation = NO;

    self.searchController.searchBar.delegate = self;
    self.tableView.tableHeaderView = self.searchController.searchBar;
    self.definesPresentationContext = YES;
    [self.searchController.searchBar sizeToFit];

}
- (void)viewWillAppear:(BOOL)animated {

    NSBundle *bundle = [NSBundle mainBundle];

    self.files  = [bundle pathsForResourcesOfType:@"pdf" inDirectory:@"thepdfpowerpoints"];
    NSString *documentsDirectoryPath = [self.files objectAtIndex:thepath.row];
    self.title = @"Devo Songs";
    self.filenames = [[documentsDirectoryPath lastPathComponent] stringByDeletingPathExtension];


    NSMutableArray *names = [NSMutableArray arrayWithCapacity:[self.files count]];
    for (NSString *path in self.files) {
        [names addObject:[[path lastPathComponent] stringByDeletingPathExtension]];
    }
    self.files = [names sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];


     self.tableView.delegate = self;
       self.tableView.dataSource = self;
       self.tableView.backgroundColor = [UIColor darkGrayColor];
       self.view.backgroundColor = [UIColor grayColor];
    [super viewWillAppear:animated];

}
- (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 (self.searchController.isActive) {
        return [searchResults count];

    }
    else {
        return [self.files count];
    }






}


// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    NSString *filename = [[[self.files objectAtIndex:indexPath.row] lastPathComponent] stringByDeletingPathExtension];
    NSInteger row = [indexPath row];
    NSString *contentForThisRow = nil;


        contentForThisRow = filename;

    static NSString *CellIdentifier = @"CellIdentifier";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil)
    {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    }


    if( UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad ) {
        [[cell textLabel] setText:contentForThisRow];
        cell.textLabel.font = [UIFont fontWithName:@"Roboto-Bold" size:38];
        cell.textLabel.textColor = [UIColor whiteColor];
        cell.backgroundColor = [UIColor blackColor];
        return cell;
    }
    else {
        [[cell textLabel] setText:contentForThisRow];
               cell.textLabel.font = [UIFont fontWithName:@"Roboto-Bold" size:22];
               cell.textLabel.textColor = [UIColor whiteColor];
        cell.backgroundColor = [UIColor darkGrayColor];
        return cell;
    }
}
- (void)searchBar:(UISearchBar *)searchBar selectedScopeButtonIndexDidChange:(NSInteger)selectedScope{
    [self updateSearchResultsForSearchController:self.searchController];
}
-(void)updateSearchResultsForSearchController:(UISearchController *)searchController{
    NSString *searchString = self.searchController.searchBar.text;
    NSPredicate *resultPredicate;

        resultPredicate = [NSPredicate predicateWithFormat:@"SELF contains[c] %@",searchString];

    searchResults = [self.files filteredArrayUsingPredicate:resultPredicate];
    NSLog(@"results %lu", (unsigned long)[self.files count]);
    [self.tableView reloadData];
}

1 Ответ

0 голосов
/ 28 апреля 2020

Удалить ниже код или комментарий ниже

- (void)searchBar:(UISearchBar *)searchBar selectedScopeButtonIndexDidChange:(NSInteger)selectedScope{
[self updateSearchResultsForSearchController:self.searchController];}

Добавлен еще один метод делегата searchController в ваше вызываемое шоу ниже.

- (BOOL)searchBar:(UISearchBar *)searchBar shouldChangeTextInRange (NSRange)range replacementText:(NSString *)text {
 [self updateSearchResultsForSearchController:self.searchController];}

Это должно работать. Надеюсь, это поможет:)

...