在iOS中将单元格添加到UITableView的底部

我正在使用Xcode 4.2与故事板来创build一个iPhone应用程序。

当我按右上angular的编辑button,我想要删除现有的行,并看到额外的单元格(与绿色“+”图标)在顶部,这将允许我添加一个新的单元格。

我有一个使用CoreData在viewDidLoad方法中填充的数组

我已启用设置button

 self.navigationItem.rightBarButtonItem = self.editButtonItem; 

并实施该方法

 - (void)tableView:(UITableView *)tableView commitEditingStyle: (UITableViewCellEditingStyle)editingStyle forRowAtIndexPath: (NSIndexPath *)indexPath { if (editingStyle == UITableViewCellEditingStyleDelete) { // removing a cell from my array and db here... } else if (editingStyle == UITableViewCellEditingStyleInsert) { // adding a cell to my array and db here... } } 

我意识到我需要添加单元格,然后我可以编辑,但不清楚在哪里,我无法find互联网上的解释。

好的,基本的想法是,当点击编辑button时,我们将显示每行旁边的删除控件,并添加一个新的行与添加控制,以便用户可以点击它,以添加一个条目权利? 首先,由于您已经设置了编辑button,所以让我们指导我们的表格,在编辑模式下,我们应该显示一个额外的行。 我们在我们的tableView:numberOfRowsInSection

 -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return self.editing ? a_recs.count + 1 : a_recs.count; } 

这里的a_recs是我设置的用于存储logging的数组,因此您必须使用自己的数组将其切换出来。 接下来,我们告诉我们的tableView:cellForRowAtIndexPath:如何处理额外的行:

 -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { NSString *CellIdentifier = @"Cell"; BOOL b_addCell = (indexPath.row == a_recs.count); if (b_addCell) // set identifier for add row CellIdentifier = @"AddCell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) { cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; if (!b_addCell) { cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; } } if (b_addCell) cell.textLabel.text = @"Add ..."; else cell.textLabel.text = [a_recs objectAtIndex:indexPath.row]; return cell; } 

我们也想指示我们的表格,为了添加行,我们需要添加图标:

 -(UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath { if (indexPath.row == a_recs.count) return UITableViewCellEditingStyleInsert; else return UITableViewCellEditingStyleDelete; } 

牛油。 现在超级秘密功夫酱用筷子把它们连在一起:

 -(void)setEditing:(BOOL)editing animated:(BOOL)animated { [super setEditing:editing animated:animated]; [self.tableView setEditing:editing animated:animated]; if(editing) { [self.tableView beginUpdates]; [self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:a_recs.count inSection:0]] withRowAnimation:UITableViewRowAnimationLeft]; [self.tableView endUpdates]; } else { [self.tableView beginUpdates]; [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:a_recs.count inSection:0]] withRowAnimation:UITableViewRowAnimationLeft]; [self.tableView endUpdates]; // place here anything else to do when the done button is clicked } } 

祝你好运和好胃口!

本教程值得一读,应该帮助你。 它显示了如何在UITableView的底部设置“添加新行”UITableView行,但是您应该能够在您的UITableView的顶部显示您的实现:

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 

例如

 if(self.editing && indexPath.row == 1) { cell.text = @"Insert new row"; ... 

希望这可以帮助!