0

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

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

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

这是我排列数据的方式:

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

4 回答 4

0

内部cellForRowAtIndexPath方法尝试使用以下

在第二个配方选择:

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

在第二个配方选择:

cell.textLabel.text = [recipe2.ingredients objectAtIndex:indexPath.row];
于 2013-03-12T05:34:57.640 回答
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];
    }

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

于 2013-03-12T05:44:44.017 回答
0

你想要做的是:

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

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

于 2013-03-12T05:59:40.300 回答
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];
    }
 }
于 2015-10-20T09:28:56.197 回答