为了辅助你的视图考古,你可以用一个只能用于调试的方法,叫做 recursiveDescription
,它能打印出任意视图的视图层次结构。注意这是一个私有方法, `不应该被包含在任何会被放到 App Store 的代码里`,但它对与视图层次结构实在非常有用。
添加如下打印语句到 tableView:cellForRowAtIndexPath:
中,放在 return 语句之前:
#ifdef DEBUG
NSLog(@"cell recursive description:\n\n%@\n\n",[cell performSelector:@selector(recursiveDescription)]);
#endif
一旦添加了这一行代码,你就会得到一个警告,也就是 recursiveDescription
未被申明;因为它是一个私有方法,编译器并不知道它的存在,ifdef / endif
包装器将会额外确保这行代码不会被编译进最终的 release 版里。
编译并运行;你会看到控制台全都是 log 语句,类似下面这样:
目前 Cell 里有六个视图:
UITableViewCell
这是最高层的视图。 Frame 显示它有 320 点宽和 44 点高——宽度和高度都喝预期的一致,因为它和屏幕一样宽,而高度就是 44 点。UITableViewCellScrollView
虽然你不能直接使用这个私有类,但它的名字很好地暗示了它的功能。它的 Size 和 Cell 的一样。据此我们推断它的作用是在 Delete 按钮之上装载滑动出来的内容。UIButton
它在 Cell 的最右边,就是 Disclosure Indicator 按钮。注意这不是 Delete 按钮。UIImageView
是上面UIButton
的子视图,装载着 Disclosure Indicator 的图像。UITableViewCellContentView
另外一个私有类,它包含 Cell 的内容。这个类对于开发者来说就是UITableViewCell
的contentView
属性。但它只作为一个UIView
来暴露在外,这就意味着你只在其上调用使用公开的UIView
方法;而不能使用任何与这个类关联的任何私有方法。UILabel
显示 “Item #” 文本。