0

テーブルビューに検索機能を追加できるようにしたい。この表には、さまざまな店舗の場所がリストされています。ユーザーが都市でフィルタリングできるようにしたいと思います。どういうわけか、おそらくテーブルビューセルにドロップダウンリストを追加してフィルターを作成することを考えていました。私を助けることができる誰かがこれをしましたか?

テーブルビューに検索バーコントロールがありますが、レコードの1つのフィールドでしか検索できません。検索バーがデータ内で実際に検索するフィールドを決定または選択するにはどうすればよいですか?これは私のコードです:

#pragma mark Content Filtering

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

    // Update the filtered array based on the search text and scope.

    // Remove all objects from the filtered search array

    [self.filteredResultsArray removeAllObjects];

    // Filter the array using NSPredicate

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF.name contains[c] %@",searchText];

    [self.filteredResultsArray = [NSMutableArray arrayWithArray:[self.dates filteredArrayUsingPredicate:predicate]] retain];

}



#pragma mark - UISearchDisplayController Delegate Methods

-(BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString {

    // Tells the table data source to reload when text changes

    [self filterContentForSearchText:searchString scope:

     [[self.searchDisplayController.searchBar scopeButtonTitles] objectAtIndex:[self.searchDisplayController.searchBar selectedScopeButtonIndex]]];

    // Return YES to cause the search result table view to be reloaded.

    return YES;

}



-(BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchScope:(NSInteger)searchOption {

    // Tells the table data source to reload when scope bar selection changes

    [self filterContentForSearchText:self.searchDisplayController.searchBar.text scope:

     [[self.searchDisplayController.searchBar scopeButtonTitles] objectAtIndex:searchOption]];

    // Return YES to cause the search result table view to be reloaded.

    return YES;

}

私のself.dates配列は次のように入力されます:

- (void)loadRecordsFromCoreData {

    [self.managedObjectContext performBlockAndWait:^{

        [self.managedObjectContext reset];

        NSError *error = nil;

        NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:self.entityName];

        [request setSortDescriptors:[NSArray arrayWithObject:

                                     [NSSortDescriptor sortDescriptorWithKey:@"date" ascending:YES]]];

        self.dates = [self.managedObjectContext executeFetchRequest:request error:&error];



    }];

}

それはinitWithEntityNameと関係がありますか...

4

1 に答える 1

0

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF.name contains[c] %@",searchText];

その述語は、データで検索されているフィールド(この場合は名前フィールド)を決定します。別のフィールドを検索する場合は、SELF.nameをSELF.cityまたは他のフィールドに変更するだけです。複数のフィールドを検索したり、フィルターで追加のロジックを使用したりする場合は、AppleのNSPredicateプログラミングガイドを確認してください。

于 2013-01-19T17:14:23.773 に答える