在TableView中使用不同各类的附件
问题
通过展示不同附件(accessories),抓住用户对一个TableView的关注,或者提供不同的方式使用户在你的TableView中和每个cells进行互动。
方案
使用UITableViewCell类中的accessoryType,在tableView的数据源对象中进行想着的实例化。
if ([tableView isEqual:self.myTableView]) {
static NSString *MyCellIdentifier = @"SimpleCell";
result = [tableView dequeueReusableCellWithIdentifier:MyCellIdentifier];
if (result == nil) {
result = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:MyCellIdentifier];
}
result.textLabel.text = [NSString stringWithFormat:@"Section %ld, Cell %ld",
(long)indexPath.section,
(long)indexPath.row];
result.accessoryType = UITableViewCellAccessoryDetailDisclosureButton;
}
return result;
}
讨论
可以把UITableViewCellAccessoryType枚举中定义的任何值分配到一个UITableViewCell类的实例中accessoryType的属性。
discloure indicator 和 detail discloure按钮是两个非常有用的附件。它们都通过V形乘着向用户指示,如果他们在关联的TableView单元格进行点击,将显示新的视图或视图控制器。
换句话说,用户将看到一个有更多关于当前所选项信息的屏幕。这两个附件的区别在于discloure indicator不产生事件,而detail discloure按钮在被点击时会向委托触发一个事件。
也就是说,点击cell上的按键会有不同的效果。因此detail discloure按钮允许用户在同一行上执行两个独立但想着的操作。
图4-3显示在一个TableView中展示了这两个不财附件,第一个是discloure indicator,第二个是detail discloure按钮。
图4-3. 2个不同附件的TableViewCells.
如果你点击任何一个分配到TableViewCells中的detail discloure按钮,你会马上意识到它事实上是一个按钮。现在问题来了:当用户点击这个按钮的时候TableView如何知道呢?
TableView在其委托对象上产生一个事件,一个TableViewCell的detail discloure按钮也会产生一个被TableView的委托对象捕获的事件:
此代码查找哪个TableViewCell的detail discloure按钮触发,并将该cell的文本标签的内容打印到控制台屏幕。
提醒:可以通过选择Xcode中的Run --> Console来显示控制台屏幕。