2014-07-11 50 views
5

当您使用UITableViewCell的内置样式(字幕,右侧细节等)时,无论您选择哪种样式,都可以通过textLabeldetailTextLabel(它们是UITableViewCell上的属性)非常轻松地访问文本标签。我利用这个优势来实现可重用的代码,使我可以将特定的样式应用于所有静态单元格。但是现在我想将它们全部转换为自定义样式单元格,但使用这种样式我仍然只有两个标签。我的问题是,是否可以手动设置自定义单元格的textLabeldetailTextLabel属性?如果是这样,我不必更改我的代码,我只需要设置标签属性。否则,我将不得不改变我的所有代码,以针对每个单独的单元定位每个单独的标签,这将非常麻烦。是否可以设置自定义单元格的textLabel?

对于我正在做的一个例子,我有一个方法,接受UITableViewCell,并在该方法中,我可以启用或禁用该单元格,将标签文本颜色更改为黑色或浅灰色。如果我无法访问textLabeldetailTextLabel属性,我将需要添加if语句以将单元格参数与我的单元格出口进行比较,以了解我需要更改哪些标签。

+0

您将有机会获得'textLabel'和'detailTextLabel'因为我假设你的自定义单元格会的UITableViewCell的子类。 – hgwhittle

回答

7

你当然可以!只需将标签的获取者实现为重定向到您的自定义单元格的标签。

- (UILabel *)textLabel { 
    return self.myCustomCellTextLabel; 
} 

- (UILabel *)detailTextLabel { 
    return self.myCustomCellDetailTextLabel; 
} 
+0

谢谢,那就是我一直在寻找的!但我遇到了一个问题。我分类了UITableViewCell,为XIB添加了标签,控件将这些标签拖到子类中,然后按照您的说法返回这些标签,然后在故事板中将每个单元格的自定义类更改为我的子类,并删除了该故事板中的标签细胞。我控制拖动这些故事板单元格到我的表视图控制器和'viewDidLoad'我试图设置文本,但没有出现。调试器显示标题标签为'nil',所以'self.custCell.textLabel.text = @“a”'不会导致单元格出现。 – Joey

+0

来自故事板的这些静态单元格吗? – CrimsonChris

+0

是的。我决定采取一种不同的方法,只是给单元添加第三个标签,而不是创建一个完全自定义的单元,但是我想知道我做错了什么。 – Joey

0

在自定义单元格中,您必须在contentView中添加所有视图。这是设计的方式,不建议使用现有的textFielddetailTextField,因为它可能会导致内置布局逻辑的未定义行为。 (我没有用过它们,它们可能工作正常,但我不会冒险)

如果您想避免修补所有现有代码,您可以尝试子类并覆盖由您创建的标签的属性。

@interface CustomCell1 : UITableViewCell 
@end 
@implementation CustomCell1 
{ 
    UILabel* _your_custom_label1; 
} 
- (UILabel*)textLabel 
{ 
    return _your_custom_label1; 
} 
@end 
相关问题