代码之家  ›  专栏  ›  技术社区  ›  Duck

iPhone-UITableView数据源?

  •  1
  • Duck  · 技术社区  · 15 年前

    这是一组字典。所以,为了填充我的表,我做了

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    
    ...
    
    NSDictionary *umObject = (NSDictionary*)[listaDeObjectos objectAtIndex:indexPath.row];
    NSString *oneName = [umObject objectForKey:@"name"];
    
    [cell setText:oneName];
    
    ...
    
    }
    

    这是工作正常,但现在我正试图实现对这个表的搜索。我读过一篇教程,里面有个家伙用这样的搜索方法。。。

    - (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
    {
        [searchedData removeAllObjects];// remove all data that belongs to previous search
        if([searchText isEqualToString:@""] || searchText==nil){
            [myTableView reloadData];
            searching = NO;
            return;
        }
    
        searching = YES;
        NSInteger counter = 0;
        for(NSString *name in dataSource)
        {
            NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init];
            NSRange r = [name rangeOfString:searchText];
            if(r.location != NSNotFound)
                    [searchedData addObject:name];
            counter++;
            [pool release];
        }
        [myTableView reloadData];
    }
    

    如你所见,他有这条线

    for(NSString *name in dataSource)
    

    其中name是数据源(??)中的一个条目

    这听起来像是从某种数组填充表,但据我所知,我的表不是直接从数组填充的,而是从我在代码的第一部分提取的值中逐个填充的。

    我不确定我是否理解数据源的概念。

    你们能帮忙吗?

    谢谢

    2 回复  |  直到 15 年前
        1
  •  2
  •   beefon    15 年前

    你的数据源就是你的类,在那里你拥有所有这些 UITableView 相关方法( tableView:cellForRowAtIndexPath: UITableViewDataSource 协议。

    当您为每个单元格提供数据时,您可以从数组中获取数据 listaDeObjectos . 搜索时,如果只想提供数组中的几个项目,这些项目必须采用搜索条件。

    因此,当您不处于“搜索模式”时,必须从数组中提供数据( listaDeObjectos公司 ). UISearchBar 电话 searchBar:textDidChange: 方法,您必须检查 搜索栏 ,将此项添加到单独的数组中。然后你打电话来 reloadData 方法,使所有表视图方法都被调用。 所以,这个想法是提供来自“搜索数组”的数据,如果您正在搜索,并且来自 listaDeObjectos公司 如果你不是搜索。

        2
  •  2
  •   Eiko    15 年前

    我不知道另一个来源,但我认为他使用了自己的数组来获取数据。所以你应该做些

    for (NSDictionary *dict in listaDeObjectos)
    {
        NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init];
        NSString *oneName = [dict objectForKey:@"name"];
    
        NSRange r = [name rangeOfString:searchText];
        if(r.location != NSNotFound)
            [searchedData addObject:name];
        counter++;
        [pool release];
    }
    

    推荐文章