无法设置UILabel属性

时间:2011-06-29 09:44:14

标签: iphone objective-c ios

我无法设置UILabel对象的属性。

以下代码采用- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath方法:

UILabel *label = (UILabel *)[cell viewWithTag:0];
label.text = [self.comments objectAtIndex:indexPath.row*2];
label.textColor = [UIColor cyanColor];
label.adjustsFontSizeToFitWidth = YES;

我得到的只是第四行的运行时错误(奇怪的是,前面的行没问题):

2011-06-29 11:23:57.641 Esker Monitor[94138:207] -[UITableViewCell setAdjustsFontSizeToFitWidth:]: unrecognized selector sent to instance 0x4e889e0
2011-06-29 11:23:57.642 Esker Monitor[94138:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UITableViewCell setAdjustsFontSizeToFitWidth:]: unrecognized selector sent to instance 0x4e889e0'

类似的标签属性修改(例如label.numberOfLines = 1;label.minimumFontSize = 7.0;)也会导致程序崩溃。

这里有什么微妙的我不明白吗?

7 个答案:

答案 0 :(得分:6)

如果要访问标准UITableViewCell中内置的标签,请使用单元格的textLabel属性:

UILabel *label = cell.textLabel;
...

如果您将自定义标签添加到单元格,我建议使用一些非零标签,因为0是默认标签值,所以

[cell viewWithTag:0];

可以返回任何带有0标记的子视图 - 不需要标记。因此,为您的标签指定一些非零标签,并将其添加到单元格的contentView,而不是直接添加到单元格 - 这将帮助您避免一些布局问题,例如当单元格进入编辑状态时。稍后您可以通过以下方式访问该标签:

UILabel *label = (UILabel*)[cell.contentView viewWithTag:kSomeNonZeroTag];

text和textColor方法仍然有效的原因是UITableViewCell实际上实现了这些方法(它们起源于单元格未公开公开其标签并且自SDK 3.0起不推荐使用的时候)

答案 1 :(得分:2)

实际上[cell viewWithTag:0]本身会返回UITableViewCell。所以,只需将 UILabel tag更改为其他内容,例如100,101等,

答案 2 :(得分:1)

您正在使用不同的对象制作标签(标签0用于单元格而不是标签)。检查您为UILabel标签制作的对象, 它不是UILabel类型。它需要UITableViewCell类型。

这就是它崩溃的原因。

答案 3 :(得分:0)

你需要使用cell.textLabel来访问标签,现在,由于“label”本身有UITableViewCell的引用,它会产生错误。

答案 4 :(得分:0)

为子视图提供适当的标签,然后尝试。或者,如果要设置表视图单元格的默认标签,则应使用cell.textLable

答案 5 :(得分:0)

在TableViewCell类的标题中,您应该创建

@property (nonatomic, retain) UILabel *textLabel;

在TableViewCell实现类中,确保您拥有@synthesize textLabel

在cellForRowAtIndex中,您可以从该TableViewCell类创建单元格。你可以使用这个函数获得单元格

MyCustomizedCell *cell = (MyCustomizedCell *)[tableView dequeueReusableCellWithIdentifier:(NSString *) myIndent];

依此类推,您可以像使用

一样轻松使用TableViewCell中的每个对象

cell.textLabel.adjustsFontSizeToFitWidth = YES;

[cell.textLabel setAdjustsFontSizeToFitWidth:YES];

答案 6 :(得分:-2)

你可以这样做:

[cell.textLabel setFont:[UIFont fontWithName:@"Helvetica" size:14.0]];

[cell.textLabel setTextColor:[UIColor colorWithRed:222.0/255.0 green:221.0/255.0 blue:221.0/255.0 alpha:1.0]];

[cell.textLabel setBackgroundColor:[UIColor clearColor]];

您可以像这样调整任何属性。

如有任何困难,请告诉我。

干杯。