我正在创建一个“添加新项目”行到表视图中的一个部分,该部分在进入/退出编辑模式时动态添加/删除。这样可以正常工作,但是如果表格长于屏幕,那么当您向下滚动以查看新的“添加新项目行”时,未显示任何尚未显示的行的标签。
我的代码的关键部分是:
... setEditing
-(void)setEditing:(BOOL)editing animated:(BOOL)animate
{
[super setEditing:editing animated:animate];
[self.tableView setEditing:editing animated:animate];
NSArray *paths = [NSArray arrayWithObject:
[NSIndexPath indexPathForRow:[self.location.rooms count] inSection:kSectionRooms]];
if (editing)
{
[[self tableView] insertRowsAtIndexPaths:paths
withRowAnimation:UITableViewRowAnimationTop];
}
else {
[[self tableView] deleteRowsAtIndexPaths:paths
withRowAnimation:UITableViewRowAnimationTop];
}
}
... numberOfRowsInSection
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
switch (section) {
case kSectionFields:
return NUM_SECTION_FIELDS_ROWS;
break;
case kSectionRooms:
return [location.rooms count] + ([self.tableView isEditing] ? 1 : 0);
break;
default:
return 0;
break;
}
return 0;
}
cellForRowAtIndexPath的一部分
if ([self.tableView isEditing] && row == location.rooms.count)
{
roomCell.textLabel.text = @"Add new room...";
}
else
{
roomCell.textLabel.text = [[loc.rooms objectAtIndex:row] name];
}
... editingStyleForRowAtIndexPath
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath {
switch ([indexPath section])
{
case kSectionFields:
return UITableViewCellEditingStyleNone;
break;
case kSectionRooms:
if ([indexPath row] == location.rooms.count && [self.tableView isEditing])
{
return UITableViewCellEditingStyleInsert;
}
else
{
return UITableViewCellEditingStyleDelete;
}
break;
}
return UITableViewCellEditingStyleNone;
}
如果没有滚动,这些都能正常工作,但只要滚动就会出现问题。我知道这必须是因为TableView没有显示隐藏的行,因此没有经历延迟加载过程。我已经尝试过使用reloadData,但这并没有什么区别(不出所料)但是由于我是新手,我不确定使行显示的最佳方式。
我相信会有一个简单的解决方案,所以任何想法都会受到最高的赞赏!
提前干杯
Jez的