UITableView通过代理来监听某行被选中的事件。
点击某行, 弹出对话框, 然后修改数据, 再把数据刷新到UITableView上。
1> 监听每个cell的点击事件- 通过代理来监听,
* 选中某行: - (void)tableView:(UITableView )tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
* 取消选中某行: - (void)tableView:(UITableView )tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath
2> 弹出UIAlertView、UIAlertController
* 修来弹出对话框的样式
alertView.alertViewStyle = UIAlertViewStylePlainTextInput;
根据索引获取指定的某个文本框
[alertView textFieldAtIndex:0]
[alertView textFieldAtIndex:0].text = hero.name;通过UIAlertView的代理来监听对话框中的按钮的点击事件
- 实现UIAlertView的 - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex代理方法
3> 刷新tableView的方法(刷洗tableView的意思就是重新调用数据源方法和代理方法)
// [self.tableView reloadData]; // 不好,因为重新刷新整个TableView
// [self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationLeft];
/** 参考代码:
- (void)tableView:(UITableView )tableView didSelectRowAtIndexPath:(NSIndexPath )indexPath
{
CZHero *hero = self.heros[indexPath.row];
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"提示" message:nil delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"确定", nil];
alertView.alertViewStyle = UIAlertViewStylePlainTextInput;
[alertView textFieldAtIndex:0].text = hero.name;
// 记录当前点击的行的行号
alertView.tag = indexPath.row;
[alertView show];
}
#pragma mark - alertView的代理方法
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
// 判断点击的是哪个按钮
if (buttonIndex == 1) {
//获取文本框中的数据
NSString *name = [alertView textFieldAtIndex:0].text;
// 修改模型数据
// 根据行号, 获取当前点击的行的模型数据
CZHero *hero = self.heros[alertView.tag];
hero.name = name;
// 重新刷新TableView数据
// 重新刷新整个TableView, UITableView会重新向datasource请求数据
// 重新调用数据源方法
// [self.tableView reloadData]; // 不好重新刷新整个TableView
// 局部刷新
// 创建一个indexPath对象
NSIndexPath *path = [NSIndexPath indexPathForRow:alertView.tag inSection:0];
[self.tableView reloadRowsAtIndexPaths:@[path] withRowAnimation:UITableViewRowAnimationLeft];
}
}
*/