到目前为止,我只需要实现具有预定义设计(正常,副标题等)的原型单元,这不是问题。
现在我需要实现原型单元格,其中包含一些控件,如分段开关,开关或任何其他控件。问题是我无法找到触发的动作是如何实现的以及它们与控件的关系。此外,我还没有找到任何关于如何在单个UITableViewController中实现不同原型单元的示例。
我知道这是一个普遍的问题,但我会在这里提出一些建议。也许有人知道一些文档,教程等等。好吧,任何帮助都可以,
提前做好准备。答案 0 :(得分:11)
我花了一段时间才了解如何使用原型细胞。如果要访问原型单元格内的用户界面元素,则必须创建UITableViewCell的子类并将其分配给Interface Builder中的原型单元格。 然后,您必须手动定义IBOutlet属性,例如:
@interface OptionSwitchCell : UITableViewCell
@property (weak, nonatomic) IBOutlet UISwitch* switchControl;
@end
之后,您可以通过控制 - 从元素拖动到辅助视图中的属性定义来连接界面元素。 相反,IBActions可以在拥有的View Controller中定义。您可以控制 - 从界面元素拖动到View Controller头文件并创建操作。在动作实现中,您可能想知道哪个单元格正在触发操作。我是这样做的:
@implementation SomeTableViewController
- (IBAction)toggleActivity:(id)sender {
OptionSwitchCell* cell = (OptionSwitchCell *)[sender superview].superview;
NSIndexPath *indexPath = [self.tableView indexPathForCell:cell];
...
}
@end
找到相应单元格和索引路径的另一种解决方案(通过jrturton):
- (IBAction)toggleActivity:(id)sender {
CGPoint hitPoint = [sender convertPoint:CGPointZero toView:self.tableView];
NSIndexPath *hitIndex = [self.tableView indexPathForRowAtPoint:hitPoint];
OptionSwitchCell* cell = (OptionSwitchCell *)[self.tableView cellForRowAtIndexPath:hitIndex];
...
}
虽然这有点古怪,但到目前为止我还没有找到更好的解决方案。希望有所帮助。