TableViewController editingStyle和插入

时间:2011-06-21 15:24:15

标签: iphone uitableview

http://developer.apple.com/library/ios/#documentation/userexperience/conceptual/TableView_iPhone/ManageInsertDeleteRow/ManageInsertDeleteRow.html

我需要插入和删除选项,所以......

self.navigationItem.rightBarButtonItem = self.editButtonItem;
UIBarButtonItem *addButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(addItem:)];
self.navigationItem.leftBarButtonItem = addButton;
到目前为止,这一切都很好。我完成了“删除”编程,但“插入”有问题

   - (void)addItem:sender {
}

我在addItem中添加什么来启动“编辑模式”并将我的EditingStyle更改为UITableViewCellEditingStyleInsert?在Apple库中看到的iteminputcontroller到底是什么?对此没有任何解释,帮助在线模糊:(

3 个答案:

答案 0 :(得分:5)

tableView方法中调用addItem的setEditing函数。

- (void)setEditing:(BOOL)editing animated:(BOOL)animate

应该如下。

- (void)addItem:sender {
   [myTableview setEditing:YES animated:YES];
}

UITableViewCellEditingStyleInsert方法返回editingStyleForRowAtIndexPath

     - (UITableViewCellEditingStyle)tableView:(UITableView *)aTableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath {

        if(someCondtion){
        return UITableViewCellEditingStyleInsert;
        } else {
        return UITableViewCellEditingStyleDelete;
        }
}

根据编辑操作删除或插入更新数据模型。

- (void)tableView:(UITableView *)aTableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle
    forRowAtIndexPath:(NSIndexPath *)indexPath {

    if (editingStyle == UITableViewCellEditingStyleDelete) {
       //put code to handle deletion
       [myTableView reloadData];
    } else if (editingStyle == UITableViewCellEditingStyleInsert) {
       //put code to handle insertion
       [myTableView reloadData];
    }
}

答案 1 :(得分:2)

利用内置功能,首先设置:

tableView.dataSource = self;
tableView.delegate = self;

并添加到您的

- (void)addItem:sender {
     [tableview setEditing:YES animated:YES];
}

然后,只需覆盖此方法

- (void)tableView:(UITableView *)tableView commitEditingStyle: UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath 
   {
       // If user deletes
       if (editingStyle == UITableViewCellEditingStyleDelete) 
       {
          //DELETE THE KEY FROM YOUR DATASOURCE AND THEN:
           [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] 
                  withRowAnimation:UITableViewRowAnimationFade]; //NICE EFFECT
       }
       else if(editingStyle == UITableViewCellEditingStyleInsert)
       {
           //ADD THE KEY TO YOUR DATASOURCE AND THEN:
           [tableView reloadData]; //THIS JUST RELOADS THE TABLE WITH YOUR DATASOURCE UPDATED       
       }
   }

答案 2 :(得分:1)

拥有 + 按钮没有太大价值,如果它会像'编辑'按钮那样......对吗?因此,您的addItem:方法应实现用于显示新视图的代码,即呈现视图控制器以输入要添加的项目的详细信息。 (我的例子来自Apple的示例代码):

- (void)addItem:(id)sender {
    // ItemInputController is a view controller used to display textFields, etc.
    // whatever you need for your new item... You have to write it, name it however you want
    ItemInputController *itemInputController = [[ItemInputController alloc] init];

    UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:itemInputController];

    [[self navigationController] presentModalViewController:navigationController animated:YES];

    [navigationController release];
    [itemInputController release];

}

否则,要使用UITableViewCellEditingStyleInsert,您需要使用editingStyle = UITableViewCellEditingStyleInsert实际配置一个单元格(例如,表格中的最后一个单元格)。点击“编辑”按钮进入编辑模式。当用户点按“添加项目”单元格时,您将调用与上述addItem:方法相同的代码。

我希望这能为你解决问题。