2010-04-29 67 views
1

我试图添加一个额外的单元格作为tableView中最后一个单元格的自定义内容,而不更改创建表格的其他内容的字典。我认为添加它的地方在cellForRowAtIndexPath而不是添加到numberOfRowsInSection,如果我这样做就会崩溃。在UITable的末尾添加空白单元格

我得到一个cellCount从该表创建数据字典,然后在cellForRowAtIndexPath,我有:

if (indexPath.row == cellCount) { 
     ... stuff goes here 
      return cell; 
         } 
当然

,这永远不会被调用。如果我做if (indexPath.row == cellCount -1)它会覆盖最后一个包含内容的单元格。

我可以得到这个工作,如果我添加一个空白条目到我填充字典的XML,但这是丑陋的。

示例代码会很整洁!

回答

1

这里的问题是,tableviews的设计是为了方便准确地显示你的数据模型的内容,你已经决定你不想这样做。你正在对抗API。

这样做的直接方法是在numberOfRowsInSection中进行检查,以便在要显示输入行时将行数加1。然后在cellForRowAtIndexPath:中,您将需要检查表视图是否要求输入行并返回适当类型的单元格。

从UI设计角度来看,您可能需要考虑此设置是否最好。这不是一个标准的设置。用户是否理解他们只能编辑表格的最后一行?他们会理解他们不能编辑其他行吗?用户界面中是否有任何内容告诉他们这是如何工作的?用户每次需要添加数据时都必须滚动到表格的末尾?这张桌子能增长多久?如何显示表格最后一行的键盘会影响表格的滚动方式?

我认为这将是一个更好的设计,使用页脚视图来显示文本字段,以便从视觉上区别于表格的其余部分。这在程序上也会更简单。每次请求单元格时,您都不必检查表是否要求提供最后一行。

编辑:

在考虑这个问题,也许是分段表会更简单。只需将特殊行放在其自己的部分(带或不带头部)。这将简化您对源自字典的行的处理,因为该部分中的行数始终是字典的计数。同样,您可以检查indexpath的section属性以知道哪个单元返回哪个行。

+0

感谢TechZen。有问题的单元格不适用于编辑。它将提供上面提供的数据的摘要,所以它将被添加到单元格中,而不是从字典中。 – 2010-04-29 15:58:59

+0

看到我的编辑上面的另一个想法。 – TechZen 2010-04-29 17:24:11

+0

非常好的建议,如果我没有从数据中绘制3张表格,我相信这会起作用。应用程序表如下所示:国家 - >州 - >主要城市我只需要在主要城市表上的第二部分,并且在绘制表格后我无法返回并添加一个部分。如果我创建两个部分,前两个表将复制第一部分的数据。 – 2010-04-29 18:37:21

1

首先您需要修改numberOfRowsInSection以返回+1。然后在cellForRowAtIndexPath中,您需要添加额外的空白单元格。

+0

不幸的是,当我尝试返回比字典中的节点的数量更大的值就崩溃了“超越界限”错误。这是因为从这些节点正在创建几个表。表1显示了一些数据(10个单元格),表格2显示了其他数据(8个单元格,变量)和表格3多个数据(10个或更多个单元格)。每个表中单元格的数量由字典中数量不同的键确定。 – 2010-04-29 16:07:37

1

您需要为提供额外的单元格cellForRowAtIndexPathnumberOfRowsInSection

假设cellCount是细胞的阵列中的实际数目,则:(一)cellForRowAtIndexPath回报额外的自定义单元格时indexPath.row == cellCount,和(b)在numberOfRowsInSection你需要return cellCount+1

假设一个部分,例如会去是这样的:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    return [journalArray count] + 1; // add 1 for summary 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView 
     cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if (indexPath.row < [journalArray count]) { 
     return [journalArray objectAtIndex:indexPath.row]; 
    } else { 
     return summaryCell; 
    } 
} 
相关问题