Как я могу реализовать поиск Objective-C? - PullRequest
0 голосов
/ 19 января 2011

У меня есть такая запись.

Имя - Фамилия - Номер телефона - Адрес - Обозначение

  1. A - Мик - 789367789 - Нью-Йорк - Профессор

  2. B - Йосеф - 534647458 - США - Доктор

  3. C - Sha - 342576765 - США - Доктор

  4. D - Джи - 535346457 - США - Деловой человек

...... Вот так

Я отображаю имя FirstName в UITableView с помощью UISearchBar. Поиск работает нормально, он фильтрует данные по ключевому слову, которое вы вводите в SearchBar, но предположим, что вы печатаете M, он перечисляет все элементы M, а затем, когда я нажимаю на первый элемент M, он отображает Подробности A, а не M на следующем просмотре.

Я думаю, вы понимаете мою проблему.

Как я могу решить эту проблему, как передать несколько значений в следующем представлении, соответствующем записи .?

Спасибо

Эту функцию я взял из того же кода TableView (пример кода Apple с панелью поиска). и я изменил это в соответствии с моей логикой.

 - (void) searchTableView 
{

    NSString *searchText = searchBar.text;
    NSMutableArray *searchArray = [[NSMutableArray alloc] init];

    NSInteger TotalNoOfRecords=[self.SearchtableDataSource count];
    for (int i=0;i<TotalNoOfRecords;i++)
    {   NSDictionary *dictionary = [self.SearchtableDataSource objectAtIndex:i];
        NSArray *array = [dictionary objectForKey:@"Title"];
        NSString *arrayID=  [dictionary objectForKey:@"ID"];
        NSLog(@"Testing - Id-%d",arrayID);
        [searchArrayID addObject:arrayID];
        [searchArray addObject:array];
    }

    for (NSString *sTemp in searchArray)
    {

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

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

    [searchArray release];
    searchArray = nil;
 }

Это мой код didSelectRowAtIndexPath. Я знаю, что это нужно изменить, но я не знаю, как?

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{
    NSDictionary *dictionary = [self.SearchtableDataSource objectAtIndex:indexPath.row];
    FirstName=  [dictionary objectForKey:@"FirstName"];
    LastName=[dictionary objectForKey:@"LastName"];
    DetailViewController *ivc = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:[NSBundle mainBundle]];    
    ivc.FirstName = FirstName;  
    ivc.LastName=LastName;
    ivc.Title=[dictionary objectForKey:@"Details of Person"];  
    [self.navigationController pushViewController:ivc animated:YES];    
    [ivc release];
}

Пожалуйста, помогите мне ...

Спасибо

Ответы [ 2 ]

0 голосов
/ 19 января 2011

Измените метод init в методе didSelectrowatIndexPath, передайте объект словаря и установите там атрибуты DetailViewController, надеюсь, он будет работать так же, как и у меня.

0 голосов
/ 19 января 2011

Убедитесь, что вы получаете значение из copyListOfItems in -didSelectRowAtIndexPath .

EDIT:

Сначала вы должны четко понять логику. SearchedTableDatasource содержит полный набор данных tableViews для загрузки в табличное представление. copyListofItems содержит отфильтрованные элементы. Так что в didSelectRowAtIndexPath вы должны кодировать следующим образом:

if(searching==YES)

{

//retrieve the values from copyListofItems array

}

else

{

//retrieve the values from SearchedTableDatasource array

}

А также вы используете функцию void для поиска, если это так, объявите массив copyListofItems как глобальный или создайте функцию для возврата экземпляра NSMutableArray.

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