Как реализовать функцию поиска UITableView - PullRequest
0 голосов
/ 22 августа 2010

В моем приложении для iPhone реализовано представление UITable View с функцией поиска. Значения в таблице сгруппированы в разделы из A-Z. Всякий раз, когда пользователь нажимает на конкретную ячейку в таблице, он загружает контроллер подробного представления, который выдает все значения этого конкретного пользователя. Теперь моя проблема заключается в том, что всякий раз, когда я ищу какой-либо контакт и нажимаю на конкретного пользователя, чтобы проверить его подробный вид, он всегда возвращает контакт, начинающийся с буквы А. Поэтому я сомневаюсь, как реализовать эту функцию поиска. Есть ли способ получить имя контакта, который я нажал .. Пожалуйста, проверьте этот снимок экрана. Например, если я ищу какой-либо контакт, начинающийся с буквы 'B', и нажимаю на этот контакт, он загружает подробный вид контакта, начинающегося с буквы 'A'. Я получаю все значения из базы данных. Можете ли вы помочь мне ... alt text

Это код:

Код, который я написал здесь, находится в методе:

Я получаю все контакты из базы данных и присваиваю массиву контакты. Затем я группирую все контакты в соответствии с алфавитами и группирую все в словарь с ключами в виде A-Z и значениями в качестве имен контактов, начинающихся с этих букв. Теперь, когда я ищу определенный контакт, его имя может начинаться с буквы A, B или Z..so в строке поиска, когда я ищу конкретный контакт, например, контакт, начинающийся с буквы Z, в этом случае он дает подробную информацию о человек с А. Я хочу, чтобы это изменилось, чтобы всякий раз, когда я нажимал на конкретный контакт, он загружал его данные. Я не могу понять, как это сделать ..

    contacts = [[db getContacts:@"Contacts"] componentsSeparatedByString:@","];
    [db cleanup];

    NSMutableArray *tempArray = [[NSMutableArray alloc] init];
    NSString *charString;
    for (int i=65; i<91; i++) {
        charString = [NSString stringWithFormat:@"%c",(char *)i];
        [tempArray addObject:charString];
    }
    [charString release];

    NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];


    for (int i=0; i<[tempArray count]; i++) {
        NSMutableArray *contactsByIndex = [[[NSMutableArray alloc] init]autorelease];
        NSString *tempChar = [tempArray objectAtIndex:i];

        for (int j=0; j<[contacts count]-1; j++)
        {

            NSString *test = [contacts objectAtIndex:j];
            NSString *tempString = [test substringToIndex:1];

            if ([tempString isEqualToString:tempChar]) {
                [contactsByIndex addObject:[contacts objectAtIndex:j]];
            }


        }
        [dict setObject:contactsByIndex forKey:[tempArray objectAtIndex:i]];
    }
        self.contactNames = dict;

    NSArray *array = [[contactNames allKeys] sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)];

    self.contactKeys = array;

    [dict release];
    [tempArray release];

    //---display the searchbar--- 
    self.tableView.tableHeaderView = searchBar; 
    searchBar.autocorrectionType = UITextAutocorrectionTypeYes;

    listOfContacts = [[NSMutableArray alloc] init]; 
    for (NSString *key in array)  
    {

        NSArray *contactsArray = [contactNames objectForKey:key]; 
        for (NSString *name in contactsArray) {
            [listOfContacts addObject:name];
        }
    }


   - (void) searchContactsTableView {

    //---clears the search result--- 
    [searchResult removeAllObjects];
    for (NSString *str in listOfContacts) {
        NSRange titleResultsRange = [str rangeOfString:searchBar.text options:NSCaseInsensitiveSearch];
        if (titleResultsRange.length > 0) 
            [searchResult addObject:str];

    }

}



- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    // Navigation logic may go here. Create and push another view controller.
    NSString *selectedRow=nil;
    if (isSearchOn) {
        selectedRow=[searchResult objectAtIndex:indexPath.row];
    }

    DetailViewController *detailViewController;
    int section_index=[indexPath indexAtPosition:[indexPath length]-2];
    int sugarid_Index = [indexPath indexAtPosition: [indexPath length]-1];
    NSString* sectionName=[contactKeys objectAtIndex:section_index];
    NSLog(@"%@",sectionName);

//This is a method which gets the details of a particular contact based on the section and the row selected..Contacts is the table name

    NSString *getContact=[db getId:@"Contacts" bySection:sectionName andIndex:sugarid_Index];
    id=[db getContact:@"Contacts" id:getContact];
    // Pass the selected object to the new view controller.
    detailViewController = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil];
    detailViewController.eachContact=contactForSugarId;
    [self.navigationController pushViewController:detailViewController animated:YES];

}

Когда я ищу контакт, он должен искать имя в базе данных и возвращать его данные. Есть ли способ сделать это .. пожалуйста, дайте мне знать, или есть способ получить имя ячейки, то есть имя контакта, чтобы я мог использовать это в одном из моих методов базы данных, чтобы получить информацию о контакте, который я выбрал .

1 Ответ

0 голосов
/ 22 августа 2010

От руки кажется, что вы ищете неправильный массив контактов после поиска. Вам нужно иметь два массива. Один со всеми контактами и один с отфильтрованными контактами. При поиске упорядочите все результаты в отфильтрованном списке и извлеките подробности из этого списка.

Имеет ли это смысл?

Если нет, попробуйте опубликовать немного кода и объяснить свою структуру.

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