2012-04-21 54 views
6

到目前为止,我只需要实现具有预定义设计(正常,字幕等)的原型单元,并没有出现问题。带有UIControls的iOS原型单元内

现在我需要实现包含像分段开关,开关或任何其他控件的原型单元。问题是我没有能够找出触发的行为是如何实施的,以及它们与控制有什么关系。另外我还没有找到任何示例说明如何在单个UITableViewController中实现不同的原型单元。

我知道这是一个通用的问题,但我很欣赏这里的一些指针。也许有人知道一些文档,教程等,那么,任何帮助会做,

Thnaks提前。

回答

11

我花了一段时间才了解如何使用原型单元。如果要访问原型单元格内的用户界面元素,则必须创建UITableViewCell的子类并将其分配给Interface Builder中的原型单元。 然后,你必须手动e.g定义IBOutlet中属性:

@interface OptionSwitchCell : UITableViewCell 
@property (weak, nonatomic) IBOutlet UISwitch* switchControl; 
@end 

在这之后,就可以通过控制拖动从元件到属性定义在辅助视图连接界面元素。 可以在拥有的View Controller中定义IBActions。您可以控制 - 从界面元素拖动到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]; 
    ... 
} 

虽然这是一个有点古怪,我还没有找到一个更好的解决方案至今。希望有所帮助。

+1

几分钟前,我发现了这个视频(及其第二部分):http://youtu.be/0AsChJk422c它或多或少是你解释的,但他/她使用了一个委托。原理相同,但看起来更干净一点。感谢您的回答 ! – Marcal 2012-04-21 12:20:54

+0

这确实是一个更清洁的解决方案。感谢指针。尽管所有协议都有一些样板代码。 – Sbhklr 2012-04-21 12:48:03

+1

找到控制行的更好方法可以在我的答案中找到:http://stackoverflow.com/questions/9274494/how-to-know-the-uitableview-row-number/9274863#9274863 – jrturton 2012-04-21 15:29:23