iOS项目,oc语言,原来页面是CreateOutboundViewController是个tableview,点击按钮进入另外一个CreateOutboundDeletePopupView弹窗,在这个弹窗点击确定进行删除,向后台请求数据,删除之后自动关掉弹窗,主要是后面这个怎么实现,删除成功怎么让他的tableviewcell里面的按钮显示,详细一点,代码放在哪个文件里面也说一下
时间: 2024-03-20 22:44:08 浏览: 59
可以在弹窗的视图控制器 `CreateOutboundDeletePopupView` 中定义一个协议,然后让 `CreateOutboundViewController` 实现该协议,以便在删除操作完成后更新数据。
首先,在 `CreateOutboundDeletePopupView` 中定义一个协议,例如:
```
@protocol CreateOutboundDeletePopupViewDelegate <NSObject>
- (void)didDeleteOutbound;
@end
```
然后在 `CreateOutboundDeletePopupView` 中定义一个属性,用来保存委托对象:
```
@property (nonatomic, weak) id<CreateOutboundDeletePopupViewDelegate> delegate;
```
在弹窗的确认删除按钮点击事件中,调用代理方法来通知委托对象删除操作已完成:
```
- (IBAction)deleteButtonClicked:(id)sender {
// 向后台请求数据,删除出库记录
[self deleteOutboundRecord];
if ([self.delegate respondsToSelector:@selector(didDeleteOutbound)]) {
[self.delegate didDeleteOutbound];
}
[self dismissViewControllerAnimated:YES completion:nil];
}
```
接下来,在 `CreateOutboundViewController` 中实现 `CreateOutboundDeletePopupViewDelegate` 协议,重写 `didDeleteOutbound` 方法,在该方法中更新数据源,并且刷新表格:
```
- (void)didDeleteOutbound {
// 更新数据源
[self.dataArray removeObjectAtIndex:self.selectedIndex];
// 刷新表格
[self.tableView reloadData];
}
```
当确认删除按钮点击后,会先执行 `deleteOutboundRecord` 方法向后台请求删除数据,然后执行代理方法 `didDeleteOutbound`,在该方法中更新数据源,刷新表格。
至于如何让该行的按钮显示,需要在 `cellForRowAtIndexPath` 方法中根据数据源中的数据来设置该行按钮的状态。具体的代码如下:
```
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"OutboundCell";
OutboundCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
// 配置cell
OutboundModel *model = [self.dataArray objectAtIndex:indexPath.row];
cell.titleLabel.text = model.title;
cell.timeLabel.text = model.time;
cell.statusLabel.text = model.status;
// 设置按钮状态
if (model.isDeleted) {
[cell.deleteButton setTitle:@"已删除" forState:UIControlStateNormal];
cell.deleteButton.enabled = NO;
} else {
[cell.deleteButton setTitle:@"删除" forState:UIControlStateNormal];
cell.deleteButton.enabled = YES;
}
// ...
}
```
在 `OutboundModel` 中添加一个布尔类型的属性 `isDeleted`,当删除操作完成后,通过设置该属性为 `YES` 来让该行按钮显示为已删除状态。
阅读全文