Автоматически предлагать имена из списка контактов относительно буквы, введенной в текстовое поле - PullRequest
0 голосов
/ 12 января 2012

У меня есть текстовое поле, в которое пользователь вводит имя. Теперь, когда в текстовое поле введена буква, скажем, «Т», тогда как я могу получить предложения по именам из списка контактов в iphone относительно этой введенной буквы.

Также мне нужно отобразить соответствующий номер, соответствующий введенному имени.

Я прошел документацию на яблоко ,

Может ли кто-нибудь помочь мне с ценными предложениями или примером кода:

Заранее спасибо:)

EDIT

Мне удалось просмотреть контакты в журнале (консоли), поскольку я написал код, предложенный г-ном Анилом Котари в методе viewDidLoad

Как предложил г-н Анил Котари, я реализовал штрих-код поиска для методов делегата текстового поля следующим образом:

- (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;
    }
}

но все равно не работает: (

Ответы [ 2 ]

1 голос
/ 12 января 2012

Проверьте код, который я уже сделал в некоторых приложениях, такие вещи: -

- (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;
}

не стесняйтесь спрашивать о любых дальнейших запросах ..

0 голосов
/ 12 января 2012

Вы должны использовать UISearchBar, реализовать метод делегата:

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

Возьмите букву \ s из searchText и получите контакты, используя ABAddressBookRef, затем соответственно обновите SearchDisplayController.

надеюсь, что это немного помогает

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...