Tableview与空单元格

时间:2013-03-12 05:30:06

标签: ios objective-c cocoa-touch uitableview

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

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

任何人都可以解释如何在没有任何额外空单元格的情况下获取表格视图吗?

以下是我如何安排数据:

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;
}

4 个答案:

答案 0 :(得分:0)

cellForRowAtIndexPath内部方法尝试使用以下

在第二个食谱选择中:

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

在第二个食谱选择中:

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

答案 1 :(得分:0)

修改以下功能: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];
    }

之后,确保在选择完成后重新加载表格视图。 愿这对你有帮助。

答案 2 :(得分:0)

您想要做的是:

你将拥有充满Recipe Objects&这将是您的tableview的数据源。 &安培;当你点击任何一个食谱(名称)时,它会推送到另一个视图控制器,在tableview(列表)中给出该食谱所需的成分列表。

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

答案 3 :(得分:0)

在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];
    }
 }