到目前为止,我只需要实现具有预定义设计(正常,字幕等)的原型单元,并没有出现问题。带有UIControls的iOS原型单元内
现在我需要实现包含像分段开关,开关或任何其他控件的原型单元。问题是我没有能够找出触发的行为是如何实施的,以及它们与控制有什么关系。另外我还没有找到任何示例说明如何在单个UITableViewController中实现不同的原型单元。
我知道这是一个通用的问题,但我很欣赏这里的一些指针。也许有人知道一些文档,教程等,那么,任何帮助会做,
Thnaks提前。
到目前为止,我只需要实现具有预定义设计(正常,字幕等)的原型单元,并没有出现问题。带有UIControls的iOS原型单元内
现在我需要实现包含像分段开关,开关或任何其他控件的原型单元。问题是我没有能够找出触发的行为是如何实施的,以及它们与控制有什么关系。另外我还没有找到任何示例说明如何在单个UITableViewController中实现不同的原型单元。
我知道这是一个通用的问题,但我很欣赏这里的一些指针。也许有人知道一些文档,教程等,那么,任何帮助会做,
Thnaks提前。
我花了一段时间才了解如何使用原型单元。如果要访问原型单元格内的用户界面元素,则必须创建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];
...
}
虽然这是一个有点古怪,我还没有找到一个更好的解决方案至今。希望有所帮助。
几分钟前,我发现了这个视频(及其第二部分):http://youtu.be/0AsChJk422c它或多或少是你解释的,但他/她使用了一个委托。原理相同,但看起来更干净一点。感谢您的回答 ! – Marcal 2012-04-21 12:20:54
这确实是一个更清洁的解决方案。感谢指针。尽管所有协议都有一些样板代码。 – Sbhklr 2012-04-21 12:48:03
找到控制行的更好方法可以在我的答案中找到:http://stackoverflow.com/questions/9274494/how-to-know-the-uitableview-row-number/9274863#9274863 – jrturton 2012-04-21 15:29:23