6

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

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

我知道这是一个一般性的问题,但我很感激这里的一些指示。也许有人知道一些文档、教程等。好吧,任何帮助都可以,

提前谢谢。

4

1 回答 1

10

我也花了一段时间才了解如何使用原型单元。如果要访问原型单元格内的用户界面元素,则必须创建 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];
    ...
}

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

于 2012-04-21T11:47:51.743 回答