1

私はテーブル ビューでアプリを作成しており、名前の最初の文字が同じ最初の文字を持つ他のすべての名前で並べ替えられるネイティブの連絡先アプリのように、テーブル データを並べ替えられるようにしたいと考えています。可変配列を使用しています。

実装ファイル内のテーブルのコードを次に示します (これは、ファイルのすべてのコードではなく、テーブル用のコードの一部です)。

    - (void)viewDidLoad
{
    [super viewDidLoad];


    self.doctorNames = [NSMutableArray.alloc
                        initWithObjects:@"Aaron Smith", @"Michael Jordan", @"Cormac Chester", @"Marcus Baloutine", @"Joe Schmo", @"Sly James", @"Barack Obama", @"Joe Biden", @"Superman", @"Batman", @"Robin", @"Commissioner Gorden", @"Joseph Gordon Levitt" ,nil];
}

- (NSInteger)tableView:(UITableView *)tableView
 numberOfRowsInSection:(NSInteger)section
{
    if(tableView == self.searchDisplayController.searchResultsTableView)
    {
        return [searchResults count];
    }
    else
    {
        return [self.doctorNames 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];
    }
    if (tableView == self.searchDisplayController.searchResultsTableView)
    {
        cell.textLabel.text = [searchResults objectAtIndex:indexPath.row];
    }
    else
    {
        cell.textLabel.text = [doctorNames objectAtIndex:indexPath.row];
    }


    return cell;
}

-(void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope
{
    NSPredicate*resultPredicate =[NSPredicate predicateWithFormat:@"SELF contains[cd] %@", searchText];
    searchResults =[doctorNames filteredArrayUsingPredicate:resultPredicate];
}


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

    return YES;
}
4

2 に答える 2

2

データ構造が正しく設定されていません。セクション データの配列が必要です。配列の各要素はディクショナリである必要があります。各ディクショナリには、セクション タイトルのキーと、そのセクション内の行の配列のキーが必要です。

1 つの大きな配列を持つことは、セクション化されたテーブルには適していません。

于 2013-07-14T16:48:29.027 に答える
1

これを使用して、配列をアルファベット順に並べ替えることができます。

[self.doctorNames sortUsingSelector:@selector(localizedCaseInsensitiveCompare:)];
于 2013-07-14T16:46:30.157 に答える