UITableViewCell 子类不允许我设置标签文本

Posted

技术标签:

【中文标题】UITableViewCell 子类不允许我设置标签文本【英文标题】:UITableViewCell subclass doesn't let me set label text 【发布时间】:2012-09-14 11:48:08 【问题描述】:

我创建了UITableViewCell 的子类,以获得更大的 TableViewCell 和更多选项。

但我的问题是我无法设置标签的文本:

BlogItem *bi = [[channel items] objectAtIndex:[indexPath row]];

NSLog(@"%@", [bi title]);
[[cell mainLabel] setText:[bi title]];
NSLog(@"%@", [[cell mainLabel] text]);

第一条日志消息返回我期望的文本,但第二条总是记录(null)。

我真的不知道应该是什么问题。我像往常一样创建了标签:

@property (weak, nonatomic) IBOutlet UILabel *mainLabel;

当然,我连接了标签并合成了它们(检查了两次)。我也实现了方法

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath

为每个单元格获取适当的高度(效果很好)。

顺便说一句,复选标记按预期显示。这只是关于标签。

【问题讨论】:

在我看来,cellnil。首先尝试记录以确保您确实有一个单元格对象。 您是否在 xib 文件中附加了带有单元格的标签 Outlet...?如果是,那么检查你的单元格,要么是零??? 单元格存在:例如:> 但是标签本身([cell mainLabel])是零。我该如何分配它?这是一个弱引用。 【参考方案1】:

确保您在 cellForRowAtIndexPath 方法中实例化您的自定义 UITableViewCell 子类。还要确保那些IBOutlets 是在你的UITableView 子类中声明的,而不是在包含TableView 的视图控制器中。还要确保界面生成器中单元格的父类设置为相同的子类。

类似这样的东西(自定义UITableViewCell子类接口文件):

#import <UIKit/UIKit.h>

@interface MyCustomCell : UITableViewCell
    @property (nonatomic, weak) IBOutlet UILabel *mainLabel;
@end

然后在实现文件中@synthesize

@synthesize mainLabel;

然后在cellForRowAtIndexPath 中,类似:

static NSString *CellIdentifier = @"MyCellIdentifier";
MyCustomCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

BlogItem *bi = [[channel items] objectAtIndex:[indexPath row]];

// Configure the cell...
cell.mainLabel.text = [bi title];
// ... Other stuff
return cell;

【讨论】:

好吧,我的代码已经是这个样子了。唯一的区别是您将 IBOutlet 声明为强。当我学习编程时,我被告知总是将 IBOutlets 设置为弱属性。我现在将其更改为强并初始化它们。现在文本至少设置正确。因此,它不显示任何内容。

以上是关于UITableViewCell 子类不允许我设置标签文本的主要内容,如果未能解决你的问题,请参考以下文章

为子类 UITableViewCell 上的披露按钮设置目标

如何设置我的 UITableViewCell 子类的子视图以使用自动调整大小的蒙版?

UITableViewCell - 设置单元格的最佳位置

为啥我必须删除为 UITableViewCell 添加的子视图,而不是在 UITableViewCell 的子类中?

以编程方式在 UITableViewCell 上设置约束

持久化 UITableViewCell 子类属性