如何从另一个ViewController中删除表视图中的行

时间:2014-05-06 15:13:43

标签: ios objective-c ios7 ios7.1

所以我有一个DetailViewController,它从表视图中显示行/单元格的详细信息。现在我想在这个控制器上添加一个DELETE选项。我在其上添加了一个条形按钮项(垃圾)。我如何能够删除当前行/数据并从TableViewController中删除它?

TableViewController

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    WishlistItem *wish = [self.wishlistItem objectAtIndex:indexPath.row];

    DetailViewController *dvc = [self.storyboard instantiateViewControllerWithIdentifier:@"dvcID"];
    dvc.wishItemStr = wish.wishlistItem;
    dvc.dateItemStr = wish.targetDate;
    dvc.descItemStr = wish.descWishItem;

    [self.navigationController pushViewController:dvc animated:YES];
}

2 个答案:

答案 0 :(得分:1)

创建详细视图控制器时,必须使用与该行相关的一些数据对其进行初始化。因此,您可以扩展初始化方法(或者如果您愿意,可以添加一个新方法)。 当表视图控制器创建并加载详细视图控制器时,它会使用一些将删除相关行的块代码对其进行初始化。

示例:(注意我还没有编译过这个)。

Add this to the DetailViewController:

    @property (copy, nonatomic) void (^deleteRowBlock)(void);
    - (void) onDeletion:(void (^)(void)) deletionBlock;

The implementation of onDeletion is

- (void) onDeletion:(void (^)(void)) deletionBlock
{
    self.deleteRowBlock = deletionBlock;
}


When the button is pressed in the DetailViewController call the block like this:

    self.deleteRowBlock();


Then in didSelectRowAtIndexPath: add this:

            [dvc onDeletion:^{
                code to delete the row and update your data model
            }];

然后当按下按钮时,"代码删除行并更新您的数据模型"将被执行。

或者如果您不喜欢块(但您应该学会喜欢它们),请使用onDelete:(NSIndexPath *)行等方法定义协议。表视图是详细视图的委托,并实现协议方法,您在按下按钮时调用该方法。 详细视图需要知道其行号。或者,将NSIndexPath作为onDelete的参数删除,并使tableView缓存当前显示的详细视图控制器的行号,并在调用onDelete时删除缓存行号的行。 但最好使用块

答案 1 :(得分:-2)

嗯,这是另一种解决方案,

1)将self.wishListItem传递给DetailViewController,这是示例

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    DetailViewController *dvc = [self.storyboard instantiateViewControllerWithIdentifier:@"dvcID"];
    ...
    [dvc setWishListItem:self.wishListItem];
    ...
    [self.navigationController pushViewController:dvc animated:YES];
}

2)在TableViewController中实现了像这样的viewWillAppear方法

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    [self.tableView reloadData];
}

3)在DetailViewController中你有一个删除按钮,对吗?这是你按钮的动作方法

- (void)onDelete {
    // your deleting stuff ...
    [self.wishListItem removeObjectAtIndex:self.currentItemIndex];  // this line updates shared data
}

因此,TableViewController重新加载它的数据并在您返回后保持单元格最新(例如,通过触摸后退按钮)

如果您仍有问题,请随时发表评论。