IOS:tableview中的搜索栏

时间:2011-05-30 08:42:14

标签: xcode ios uitableview uisearchbar

我在tableview中创建了一个搜索栏,但是这个方法委托有问题,因为我用另一个数组里面的数组填充表视图...我显示了我的代码:

- (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 * app in appDelegate.globalArray)”它不起作用,因为我用这个全局数组中的数组元素填充表视图,我做了一个例子

在我的表视图的一行中有一个uitableviewcell,里面有四个标签; 我用这个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 * app in appDelegate.globalArray中的名称)”不起作用,如何更改我的代码?

* * 我不是说我只想检查LABEL1进行搜索

1 个答案:

答案 0 :(得分:0)

这里的问题是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];
}