接收和处理TableView事件
问题
响应TableView产生的各种事件。
方案
给TableView提供一个委托对象。
@interface TableViewController : UIViewController <UITableViewDataSource, UITableViewDelegate> @property (nonatomic, strong) UITableView *myTableView; @end
同一个视图控制器的.m文件中实现UITableViewDelegate协议中定义的一个方法。
self.myTableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStylePlain];
self.myTableView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
self.myTableView.dataSource = self;
self.myTableView.delegate = self;
[self.view addSubview:self.myTableView];
}
- (void) tableView:(UITableView )tableView didSelectRowAtIndexPath:(NSIndexPath )indexPath { if ([tableView isEqual:self.myTableView]) { NSLog(@"%@", [NSString stringWithFormat:@"Cell %ld in Section %ld is selected", (long)indexPath.row, (long)indexPath.section]); } }
讨论
当一个数据源负责给TableView提供数据时,无论何时事件发生TableView都将咨询委托,或者在完成一个任务之前如果TableView请求更多信息,它要调用一个委托的方法:
- 当一个cell被选中或者取消选中之前
- 当一个TableView需要找出每个cell的高度时
- 当一个TableView需要构造每个section静养和页脚时
当对象被设置为TableView的delegate属性。Delegate实现了tableView:didSelectRowAtIndexPath:,这样当用户选择了tableView中的某个cell或者row时,就会等到通知。SDK中的UITableViewDelegate相关文档介绍了所有可以定义的方法。