更好的处理UITableViewCell的方法

时间:2008-12-04 22:53:56

标签: iphone objective-c cocoa-touch

我有一张桌子,大约有10个单元格,4种不同的类型。我将UITextViewCell子类化,因为我想要一个标签和UITextField的IBOutlet。不确定这是否是处理它的最佳方式,但它迄今为止起作用。接下来,我有一个性别的单元格,所以我想而不是子类化UITableViewCell,我用UILabel和UITextField获取了已经子类化的单元格,并编写了以下代码:

NSArray *buttonNames = [NSArray arrayWithObjects:@"Male", @"Female", nil];
UISegmentedControl* segmentedControl = [[UISegmentedControl alloc] initWithItems:buttonNames];
segmentedControl.momentary = YES;               
segmentedControl.autoresizingMask = UIViewAutoresizingFlexibleWidth;
segmentedControl.segmentedControlStyle = UISegmentedControlStyleBar;
segmentedControl.frame = CGRectMake(75, 5, 130, 30);
[segmentedControl addTarget:self action:@selector(segmentAction:) forControlEvents:UIControlEventValueChanged];
for (UIView *oneView in cell.contentView.subviews) {
    if ([oneView isMemberOfClass:[UITextField class]]) {
        [cell.contentView insertSubview:segmentedControl aboveSubview:oneView];
        [oneView removeFromSuperview];
    }
}
[segmentedControl release];

这样做有多可怕?我应该为一个复杂的tableView子类化UITableViewCell 5次吗?是在边缘情况下处理它,如下面的确定?

3 个答案:

答案 0 :(得分:2)

我实际上是在进行子类化。子类化很便宜。单元格有不同的类型,你现在正在做的是遍历所有的子视图并检查每个视图的类的成员资格 - 这很慢!子类将清理您的代码并使其同时更快。不要试图将太多的东西塞进一个容器中,就像它一样。

答案 1 :(得分:0)

您可以随时将控件添加到子类中,但隐藏它。然后,根据行,设置单元格的“模式”。模式设置器可以隐藏/取消隐藏与该行相关的控件。如果性能是个问题,可以使用多个单元ID,以便缓存视图。

答案 2 :(得分:0)

如果这是唯一使用这些单元格的表格,我会继续在tableView:cellForRowAtIndexPath:方法中动态配置它们。不要太担心子类化。

并确保标记每个子视图(例如标签)。这样,您可以使用viewWithTag:

来引用标签