内置UIControl的iOS原型单元

时间:2012-04-21 10:20:50

标签: ios uitableview prototype

到目前为止,我只需要实现具有预定义设计(正常,副标题等)的原型单元,这不是问题。

现在我需要实现原型单元格,其中包含一些控件,如分段开关,开关或任何其他控件。问题是我无法找到触发的动作是如何实现的以及它们与控件的关系。此外,我还没有找到任何关于如何在单个UITableViewController中实现不同原型单元的示例。

我知道这是一个普遍的问题,但我会在这里提出一些建议。也许有人知道一些文档,教程等等。好吧,任何帮助都可以,

提前做好准备。

1 个答案:

答案 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];
    ...
}

虽然这有点古怪,但到目前为止我还没有找到更好的解决方案。希望有所帮助。