如何通过按下iPhone中的按钮动态地将行/单元格添加到UITableView

时间:2012-05-02 05:34:21

标签: iphone objective-c uitableview

最初我有一个只有一个添加按钮的表格视图。

当用户按下此按钮时,我需要递增细胞计数并按如下方式添加细胞

如何通过单击添加按钮

来编写行计数以及如何添加新行

//行数

 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{
    return **????** ;
}

//单元格/行上的内容

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
       ??????
}

// ###添加新行.. ###

-(IBAction)myAction:(id)sender
{
    ???????? ;
}

提前致谢...

4 个答案:

答案 0 :(得分:11)

UITableView具有插入行或节的属性。见Apple Doc

有很多这方面的教程。有2个常用于添加/删除行/部分。

insertRowsAtIndexPaths:withRowAnimation:
deleteRowsAtIndexPaths:withRowAnimation:

我已经发布了类似的答案如何使用这个: Hiding the table view cells with switch ON/OFF in iPhone

答案 1 :(得分:7)

在您的应用程序中当您在btn中执行操作时,您必须向Array添加值。

例如,在tableview中,您将在cell.textLABEL.text中显示NSString。这些字符串在NSMutableArray中。

现在调用buttonAction时

在 的 myAction

{
    NSString *newString =@"NEW CELL";

    [tableArray addObject:newString];
    [tableView reloadData];
}

在你的应用程序中尝试这个关于你的模态的逻辑。

我希望这个逻辑对你有所帮助。

答案 2 :(得分:7)

每次要添加或删除行时重新加载表视图都会给应用程序用户带来不良体验。尽管它不是执行此任务的有效方式,但它也有一些负面的副作用 - 在重新加载和更改未动画之后,所选行不会保持选中状态。

UITableView具有为动态更改表视图内容而创建的方法。这些是:

insertRowsAtIndexPaths:withRowAnimation:
moveRowAtIndexPath:toIndexPath:
deleteRowsAtIndexPaths:withRowAnimation:

请注意,这些方法允许您指定在执行指定操作时将使用的动画类型 - 当您使用reloadData修改表视图的内容时,无法实现此类行为。

此外,您甚至可以使用表视图的其他方法组合多个表视图操作(这不是必需的):

beginUpdates      endUpdates

只需将要执行的操作包装到beginUpdatesendUpdates方法的调用中,表视图将为{{1}之间请求的所有操作创建一个动画}和beginUpdates调用,以便整个过渡看起来更好,由一些分开的动画创建。

endUpdates

保持数据源状态与[self.tableView beginUpdates] //calls to insert/move and delete methods [self.tableView endUpdates] 保持的状态一致非常重要。因此,您必须确保当表视图开始执行请求的操作时,其数据源将返回正确的值。

UITableView

当表格视图开始执行操作时?这取决于操作是否在[self.tableView beginUpdates] //calls to insert/move and delete methods //operations on our data source so that its //state is consistent with state of the table view [self.tableView endUpdates] beginUpdates方法定义的动画块中。如果是,则表视图在endUpdates方法调用后开始执行操作。否则,表视图在调用insert / move或delete方法之后立即执行操作。

当您使用endUpdatesbeginUpdates方法对表视图执行操作时,您必须知道在这种情况下表视图,批处理请求的操作并按特定顺序执行它们,这是不必要的与您在表视图对象(Apple's documentation on this topic)上进行的调用顺序相同。

最重要的是要记住删除所有操作总是在所有插入操作之前执行。此外,当以升序执行插入操作时(索引1,2,3的操作),似乎以降序(索引3,2,1的操作)执行删除操作。请记住,这是至关重要的,以保持数据源的状态与表视图保持的状态一致。

花一些时间分析下面示例中提供的数据源和表格视图的操作顺序。

最后的例子:

endUpdates

答案 3 :(得分:0)

您只需在数组中添加对象,然后在按钮单击时重新加载您的tableview。

[array addobject:@""];
[tableview reloaddata];