所以我有一个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];
}
答案 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重新加载它的数据并在您返回后保持单元格最新(例如,通过触摸后退按钮)
如果您仍有问题,请随时发表评论。