0

ユーザーが名前を入力するテキストフィールドがあります。テキストフィールドに文字を入力すると、「T」としましょう。入力した文字に関して、iPhoneの連絡先リストから名前の候補を取得するにはどうすればよいですか。

また、入力した名前に対応する適切な番号を表示する必要があります。

私はアップルのドキュメントを読みました、

貴重な提案やサンプルコードスニペットを教えてください。

前もって感謝します :)

編集

Anil Kothari 氏が提案したコードを viewDidLoad メソッドに記述したため、ログ (コンソール) で連絡先を表示できました。

Anil Kothari 氏が提案したように、テキスト フィールドのデリゲート メソッドの検索バーコードを次のように実装しました。

- (void)textFieldDidBeginEditing:(UITextField *)atextField
{

    if(searching)
        return;
    searching = YES;    
}

- (void) searchTableView
{

    textField = [self.fields objectAtIndex:0];
    NSString *searchText = textField.text;

    for (UIView *subview in searchBar.subviews)
    {
        if ([subview isKindOfClass:[UITextField class]])
        {
            textField = (UITextField *)subview;
            break;
        }
    }
    textField.enablesReturnKeyAutomatically = NO;

    NSMutableArray *searchArray = [[NSMutableArray alloc] init];

    //searchArray contains matched names of friends with the searching string

    for (NSString *sTemp in contactList)
    {

        txtToSearch =[[NSString alloc] initWithString:[sTemp substringWithRange:NSMakeRange(0,[searchText length])]];

        textField = [self.fields objectAtIndex:0];

        txtToSearch = textField.text;

        NSRange titleResultsRange = [sTemp rangeOfString:searchText options:NSCaseInsensitiveSearch];

        if (titleResultsRange.length > 0)
            [copyListOfItems addObject:sTemp];

    }
    [searchArray release];
    searchArray = nil;
}

-(BOOL)textField:(UITextField *)atextField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{
[copyListOfItems removeAllObjects];

    if([string length] > 0) 
    {
        searching = YES;
        [self searchTableView];
    }
    else 
    {
        searching = NO;
    }
}

しかし、まだ機能していません:(

4

2 に答える 2

1

この種のアプリケーションで既に実行したコードを確認してください:-

- (void)viewDidLoad {
    [super viewDidLoad];

    self.tblSearchList.tableHeaderView = searchBar;
    contactList=[[NSMutableArray alloc]init];
    copyListOfItems=[[NSMutableArray alloc]init];

    ABAddressBookRef addressBook = ABAddressBookCreate( );
    CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeople( addressBook );
    CFIndex nPeople = ABAddressBookGetPersonCount( addressBook );

    for ( int i = 0; i < nPeople; i++ )
    {
        ABRecordRef ref = CFArrayGetValueAtIndex( allPeople, i );
        NSString *contactName =[[NSString alloc] initWithString:(NSString *)ABRecordCopyValue(ref,kABPersonFirstNameProperty)]; 
        NSLog(@"% @ ",contactName);
        [contactList addObject:contactName];
        [contactName release];
    }
}

searchBarデリゲートの

- (void) searchBarTextDidBeginEditing:(UISearchBar *)theSearchBar {
    if(searching)
        return;
    searching = YES;    
}

- (void)searchBar:(UISearchBar *)theSearchBar textDidChange:(NSString *)searchText {

    [copyListOfItems removeAllObjects];

    if([searchText length] > 0) {
        searching = YES;
        [self searchTableView];
    }
    else {
        searching = NO;
    }
    [self.tblSearchList reloadData];
}

- (void) searchTableView {

    NSString *searchText = searchBar.text;

    NSMutableArray *searchArray = [[NSMutableArray alloc] init];

    //searchArray contains matched names of friends with the searching string

    for (NSString *sTemp in contactList)
    {

        NSString *txtToSearch =[[NSString alloc] initWithString:[sTemp substringWithRange:NSMakeRange(0,[searchText length])]];

        NSRange titleResultsRange = [sTemp rangeOfString:searchText options:NSCaseInsensitiveSearch];

        if (titleResultsRange.length > 0)
            [copyListOfItems addObject:sTemp];

    }
    [searchArray release];
    searchArray = nil;
}

- (void) doneSearching_Clicked:(id)sender {
    searchBar.text = @"";
    [searchBar resignFirstResponder];
    searching = NO;
    [self.tblSearchList reloadData];
}

tableViewデリゲートの

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 1;
}

// Customize the number of rows in the table view.
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

    if (searching)
        return [copyListOfItems count];

}


- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {

    if(searching)
        return @"Search Results";
    return @"";
}

// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"Cell";

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

    if(searching) 
        cell.textLabel.text = [copyListOfItems objectAtIndex:indexPath.row];

    return cell;
}

それ以上の質問は自由に聞いてください..

于 2012-01-12T09:32:32.580 に答える
0

UISearchBar を使用し、デリゲート メソッドを実装する必要があります。

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText

searchText から文字を取得し、ABAddressBookRef を使用して連絡先を取得し、それに応じて SearchDisplayController を更新します。

これが少し役立つことを願っています

于 2012-01-12T08:49:05.563 に答える