在UITableView中使用插入行 [英] Using insert rows in a UITableView
问题描述
我希望我的UITableView的行为与联系人编辑器中的表格类似,即用户应该点击编辑,每个部分的底部应显示添加新类别行。
I'd like my UITableView to behave like the the table in the Contacts editor, i.e. the user should hit Edit and an "add new category" row should appear at the bottom of each section.
我使用下面的代码来执行此操作,但问题是没有平滑过渡,因为在联系人中。相反,新行突然出现。我怎样才能获得动画?
I'm using the below code to do this, but the problem is that there is no smooth transition as there is in Contacts. Instead, the new row suddenly appears. How can I get the animation?
另外,我如何回应添加新类别行的点击?在我当前的实现中,该行无法点击。
Also, how do I respond to clicks on the "add new category" row? The row is not clickable in my current implementation.
用户开始编辑时是否需要重新加载数据?我这样做是因为否则永远不会绘制插入行。
Do I need to reload the data when the user starts editing? I am doing this because otherwise the insertion rows are never drawn.
谢谢。
- (void)setEditing:(BOOL)editing animated:(BOOL)animated {
[super setEditing:editing animated:animated];
[self.tableView setEditing:editing animated:animated];
[tableView reloadData];
}
- (NSInteger)tableView:(UITableView *)_tableView numberOfRowsInSection:(NSInteger)section {
// ...
if( self.tableView.editing )
return 1 + rowCount;
}
- (UITableViewCell *)tableView:(UITableView *)_tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
// .....
NSArray* items = ...;
if( indexPath.row >= [items count] ) {
cell.textLabel.text = @"add new category";
}
// ...
return cell;
}
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath {
NSArray* items = ...;
if( indexPath.row == [items count] )
return UITableViewCellEditingStyleInsert;
return UITableViewCellEditingStyleDelete;
}
推荐答案
我错过了一件事。在setEditing:中,而不是调用reloadData我应该完成:
I was missing one thing. In setEditing:, instead of calling reloadData I should have done:
- (void)setEditing:(BOOL)editing animated:(BOOL)animated {
[super setEditing:editing animated:animated];
[self.tableView setEditing:editing animated:animated]; // not needed if super is a UITableViewController
NSMutableArray* paths = [[NSMutableArray alloc] init];
// fill paths of insertion rows here
if( editing )
[self.tableView insertRowsAtIndexPaths:paths withRowAnimation:UITableViewRowAnimationBottom];
else
[self.tableView deleteRowsAtIndexPaths:paths withRowAnimation:UITableViewRowAnimationBottom];
[paths release];
}
这篇关于在UITableView中使用插入行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!