IOS: панель поиска в виде таблицы - PullRequest
0 голосов
/ 30 мая 2011

Я создаю панель поиска в табличном представлении, но у меня есть проблемы с этим делегатом метода, потому что я заполняю табличное представление массивом внутри другого массива ... Я показываю свой код:

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
{
ProgramAppDelegate *appDelegate = (ProgramAppDelegate *)[[UIApplication sharedApplication] delegate];
[tableData removeAllObjects];// remove all data that belongs to previous search
if([searchText isEqualToString:@""] || searchText==nil){
    [myTableView reloadData];
    return;
}
NSInteger counter = 0;
for(NSString *name in appDelegate.globalArray )
{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init];
    NSRange r = [name rangeOfString:searchText];
    if(r.location != NSNotFound)
    {
        if(r.location== 0)//that is we are checking only the start of the names.
        {
            [tableData addObject:name];
        }
    }
    counter++;
    [pool release];
}
[myTableView reloadData];
}

Вы можете видетькод "for (NSString * name в appDelegate.globalArray)" не работает, потому что я заполняю табличное представление элементами массивов внутри этого глобального массива, я делаю пример

в строке моей таблицывид есть подходящий элемент и внутри него четыре метки;Я пишу эти метки со строкой этого globalArray, но таким образом:

[cell.label1 setText:[[appDelegate.globalArray objectAtIndex:indexPath.row]objectAtIndex:1]];
[cell.label2 setText:[[appDelegate.globalArray objectAtIndex:indexPath.row]objectAtIndex:2]];
[cell.label3 setText:[[appDelegate.globalArray objectAtIndex:indexPath.row]objectAtIndex:3]];
[cell.label4 setText:[[appDelegate.globalArray objectAtIndex:indexPath.row]objectAtIndex:4]];

, затем в методе делегата для панели поиска код "for (NSString * name в appDelegate.globalArray)" не работает, как можноЯ изменил свой код?

** Я НЕ СКАЗАЛ, ЧТО ХОЧУ ПРОВЕРИТЬ ТОЛЬКО ЭТИКЕТКУ 1 ДЛЯ ПОИСКА

1 Ответ

0 голосов
/ 30 мая 2011

Проблема здесь в том, что globalArray - это массив массивов. Так что цикл должен быть примерно таким:

for(NSArray *rowArray in appDelegate.globalArray )
{
    for ( NSString *name in rowArray ) {
        // Do your processing here..
    }
}

Использование tableData

В вашем tableView:cellForRowAtIndexPath: сделайте это

[cell.label1 setText:[[tableData objectAtIndex:indexPath.row]objectAtIndex:1]];
[cell.label2 setText:[[tableData objectAtIndex:indexPath.row]objectAtIndex:2]];
[cell.label3 setText:[[tableData objectAtIndex:indexPath.row]objectAtIndex:3]];
[cell.label4 setText:[[tableData objectAtIndex:indexPath.row]objectAtIndex:4]];

В вашем numberOfSectionsInTableView:, return 1;

В вашем tableView:numberOfRowsInSection:, return [tableData count];

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

- (void)resetSearchData {
    // Get appDelegate first.

    self.tableData = [NSArray arrayWithArray:appDelegate.globalArray];
}
...