接收和处理TableView事件


问题


响应TableView产生的各种事件。

方案

给TableView提供一个委托对象。

#import <UIKit/UIKit.h>

@interface TableViewController : UIViewController <UITableViewDataSource, UITableViewDelegate>
@property (nonatomic, strong) UITableView *myTableView;
@end

同一个视图控制器的.m文件中实现UITableViewDelegate协议中定义的一个方法。

- (void)viewDidLoad {
	[super viewDidLoad];

	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相关文档介绍了所有可以定义的方法。