0

問題は部分的に解決されました。投稿の最後を参照してください:

動作していない の検索結果を表示してUITableViewいます。tableは空白のままで、何も表示さresultsれませsearchingん。searchtable"No Results"table

注: では、でを実行しIBました。connectdelegateUISearchBarConnection InspectorController

お役に立てれば幸いです。

母:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return (tableView == self.searchDisplayController.searchResultsTableView) ? [self.seriesArrayFiltered count] : [self.seriesArray count];
}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"SeriesCell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

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

    Serie *aSerie = nil;

    if (tableView == self.searchDisplayController.searchResultsTableView) {
        NSLog(@"search is displaying");
        aSerie = self.seriesArrayFiltered[[indexPath row]];
    } else {
        NSLog(@"search is NOT displaying");
        aSerie = self.seriesArray[[indexPath row]];
    }

    UILabel *valueLbl = (UILabel *)[cell viewWithTag:101];
    valueLbl.text = aSerie.name;

    return cell;
}


-(void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope {

    [self.seriesArrayFiltered removeAllObjects];

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF.name contains[c] %@",searchText];
    self.seriesArrayFiltered = [NSMutableArray arrayWithArray:[self.seriesArray filteredArrayUsingPredicate:predicate]];
}


-(BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString
{
    [self filterContentForSearchText:searchString scope:
     [[self.searchDisplayController.searchBar scopeButtonTitles] objectAtIndex:[self.searchDisplayController.searchBar selectedScopeButtonIndex]]];

    return YES;
}


-(BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchScope:(NSInteger)searchOption
{
    [self filterContentForSearchText:self.searchDisplayController.searchBar.text scope:
     [[self.searchDisplayController.searchBar scopeButtonTitles] objectAtIndex:searchOption]];

    return YES;
}

時間:

#import <UIKit/UIKit.h>

@interface SeriesTableVC : UITableViewController <UISearchDisplayDelegate, UISearchBarDelegate>

@property (nonatomic, strong) NSArray *seriesArray;
@property (nonatomic, strong) NSMutableArray *seriesArrayFiltered;

@property (weak, nonatomic) IBOutlet UISearchBar *seriesSearchBar;

@end

次のコードを変更すると、検索結果が表示されるようになりましたが、ラベルが認識されない理由を知りたいです。

の:cellForRowAtIndexPath

//UILabel *valueLbl = (UILabel *)[cell viewWithTag:101];
//valueLbl.text = aSerie.name;

cell.textLabel.text = aSerie.name;
4

1 に答える 1

0

作成するセルにはラベルが含まれていないため、

UILabel *valueLbl = (UILabel *)[cell viewWithTag:101];

を返しnil、設定valueLbl.text = aSerie.name;は効果がありません。

セルを作成するときに、ラベルを作成し、サブビューとしてセルに追加する必要があります。

if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    UILabel *valueLbl = [[UILabel alloc] initWithFrame:...];
    [cell.contentView addSubview:valueLbl];
}
于 2013-03-01T19:23:21.140 に答える