#pragma mark - 代理方法 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { // 1.取得被点击这行对应的模型 MJHero *hero = self.heros[indexPath.row]; // 弹框 UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"数据展示" message:nil delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"确定", nil]; // 设置对话框的类型 alert.alertViewStyle = UIAlertViewStylePlainTextInput; // 取得唯一的那个文本框,显示英雄的名称 [alert textFieldAtIndex:0].text = hero.name; [alert show]; // 绑定行号到alertView上 alert.tag = indexPath.row; } #pragma mark - alertView的代理方法 /** * 点击了alertView上面的按钮就会调用这个方法 * * @param buttonIndex 按钮的索引,从0开始 */ - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { if (buttonIndex == 0) return; // 按钮的索引肯定不是0 // 1.取得文本框最后的文字 NSString *name = [alertView textFieldAtIndex:0].text; // int row = alertView.tag; // NSIndexPath *path = [NSIndexPath indexPathForRow:row inSection:0]; // UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:path]; // cell.textLabel.text = name; // 2.修改模型数据 int row = alertView.tag; MJHero *hero = self.heros[row]; hero.name = name; // 3.告诉tableView重新加载模型数据 // reloadData : tableView会向数据源重新请求数据 // 重新调用数据源的相应方法取得数据 // 重新调用数据源的tableView:numberOfRowsInSection:获得行数 // 重新调用数据源的tableView:cellForRowAtIndexPath:得知每一行显示怎样的cell // 全部刷新 // [self.tableView reloadData]; // 局部刷新 NSIndexPath *path = [NSIndexPath indexPathForRow:row inSection:0]; [self.tableView reloadRowsAtIndexPaths:@[path] withRowAnimation:UITableViewRowAnimationBottom]; }
时间: 2024-10-14 19:25:56