带有空单元格的表格视图

Posted

技术标签:

【中文标题】带有空单元格的表格视图【英文标题】:Tableview with empty cells 【发布时间】:2013-03-12 05:30:05 【问题描述】:

我想要的:在表格视图中显示一些数据列表。

通过创建不同的对象将数据存储在单个数组中。因此,对于每个对象,数组的大小都不同。所以我的问题是在显示数据时,一些单元格没有完全填充表格单元格,而是留空。看起来不太好。

谁能解释一下如何在没有任何额外空单元格的情况下获得表格视图?

我是这样排列数据的:

Recipe *recipe1 = [Recipe new];


recipe1.ingredients = [NSArray arrayWithObjects:@"1. Fish  - 500 g .",@"2. Onion (Big) - 2 nos (Chopped)",@"3. Garlic (Chopped) - 3 flakes",@"4. Green chillies - 2 nos (Chopped)",@"5. Chilly powder - 3/4 tbsp  ",@"6. Coriander powder - 1/2 tsp ",nil];


Recipe *recipe2 = [Recipe new];

recipe2.ingredients = [NSArray arrayWithObjects:@"1. fish - 300 gm",@"2. Tomato(medium) - 1 no",@"3. Garlic - 10 gm",@"4. Coconut powder - 10 gm",@"5. Curry leaves - A few",@"6. Salt - As reqd",@"7. Onions(medium) - 2 nos(chopped)",@"8. Oil - 1 - 2 tbsp",nil];

我想根据选择的菜在 tableview 中显示这些成分列表。

这是我的数据源方法

- (NSInteger)numberOfSectionsInTableView:(UITableView *)aTableView 
    // Return the number of sections.
    return 1;



- (NSInteger)tableView:(UITableView *)aTableView numberOfRowsInSection:(NSInteger)section 
    // Return the number of rows in the section.
    return [data count];



- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 

    static NSString *CellIdentifier = @"CellIdentifier";

    // Dequeue or create a cell of the appropriate type.
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) 
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
        cell.accessoryType = UITableViewCellAccessoryNone;
    

    [cell.textLabel setFont:[UIFont fontWithName:@"Bold" size:20]];

    // Configure the cell.
    cell.textLabel.text =[data objectAtIndex:indexPath.row];
    return cell;

【问题讨论】:

你会发布 TableView 数据源方法吗? 【参考方案1】:

cellForRowAtIndexPath 方法内尝试使用以下

第二个配方选择:

 cell.textLabel.text = [recipe1.ingredients objectAtIndex:indexPath.row];

第二个配方选择:

cell.textLabel.text = [recipe2.ingredients objectAtIndex:indexPath.row];

【讨论】:

【参考方案2】:

你想做的是:

您将拥有一个充满配方对象的数组,这将是您的 tableview 的数据源。 & 当您单击任何食谱(名称)时,它将推送到另一个视图控制器,在表格视图中提供该食谱所需的成分列表(作为列表)。

为此,首先创建一个以 recipeArray(配方对象)作为数据源的主视图控制器,并在表格视图中列出配方名称的配方。当您选择一个配方时(将调用 in didSelectRowAtIndexPath),使用所选配方对象推送到新视图控制器并在下一个 tableview 控制器中填充成分列表。

【讨论】:

【参考方案3】:

修改以下函数:for (MAC OS)

 - (NSInteger)numberOfRowsInTableView:(NSTableView *)aTableView
    
         if (First Recipe)
    return [recipe1.ingredients count];

       else if (Second Recipe)
    return [recipe2.ingredients count];

    

对于 ios

   - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
    
       if (First Recipe)
            return [recipe1.ingredients count];

               else if (Second Recipe)
            return [recipe2.ingredients count];
    

然后确保在选择完成后重新加载表格视图。 希望这会对你有所帮助。

【讨论】:

没有名为 numberOfRowsInTableView 的方法 查看并学习:developer.apple.com/library/mac/#documentation/Cocoa/Reference/… @NeelamVerma 他需要 cocoa-touch 的答案 @VigneshKumar:第二个是 Cocoa touch 本身。所以只有我更新了我的答案。 @NeelamVerma:即使在使用该功能后,空单元格仍然存在【参考方案4】:

在 viewDidLoad 中添加 1 行

tableview.tableFooterView = [[UIView alloc] init];

并且还要在下面添加这个方法,所以你不会看到任何额外的空单元格

-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath

    // Remove seperator inset
    if ([cell respondsToSelector:@selector(setSeparatorInset:)]) 
        [cell setSeparatorInset:UIEdgeInsetsZero];
    

    // Prevent the cell from inheriting the Table View's margin settings
    if ([cell respondsToSelector:@selector(setPreservesSuperviewLayoutMargins:)]) 
        [cell setPreservesSuperviewLayoutMargins:NO];
    

    // Explictly set your cell's layout margins
    if ([cell respondsToSelector:@selector(setLayoutMargins:)]) 
        [cell setLayoutMargins:UIEdgeInsetsZero];
    
 

【讨论】:

以上是关于带有空单元格的表格视图的主要内容,如果未能解决你的问题,请参考以下文章

为啥在将单元格插入带有静态单元格的表格视图时需要 tableView(_:indentationLevelForRowAt:)

带有自定义表格视图单元格的表格视图在滚动时消失

我想使用带有多个单元格的表格视图,一个单元格有多个列,2 个单元格只有一列

带有自定义单元格的表格视图仍然是普通的表格视图吗?

带有 didChangeObject 的 NSFetchedResultsController 在表格视图中显示单元格的速度很慢

ios5 UISearchBar 过滤表视图导致带有空单元格的断言错误