带有空单元格的表格视图
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 在表格视图中显示单元格的速度很慢