Ios 原型UITableViewCell初始化

Ios 原型UITableViewCell初始化,ios,objective-c,uitableview,Ios,Objective C,Uitableview,早些时候,我创建的自定义单元没有原型,只是自定义类,将该类注册为UITableView中的重用标识符,然后像这样使用 在这种情况下,我使用了:-(id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString*)reuseIdentifier,效果非常好(除了UITableViewHeaderFooterView,他们从来都不知道自己的帧,即使调用了该方法,帧也是0-但这不是我的问题) 现在我正在使用Interface

早些时候,我创建的自定义单元没有原型,只是自定义类,将该类注册为UITableView中的重用标识符,然后像这样使用

在这种情况下,我使用了:
-(id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString*)reuseIdentifier
,效果非常好(除了UITableViewHeaderFooterView,他们从来都不知道自己的帧,即使调用了该方法,帧也是0-但这不是我的问题)

现在我正在使用Interface Builder创建一些自定义UITableViewCell。创建了他们的自定义类,将接口生成器的插座连接到我的自定义类,我注意到正在调用
-(id)initWithCoder:(NSCoder*)aDecoder
,这就是我需要修改的地方。 但是,我不能。这是唯一被调用的init方法,但如果我尝试更改标签的字体,它就不会被更改。我还尝试了圆整rect按钮,但在该方法中也不起作用(我的按钮也有第0帧-尚未存在)

我的问题是,我应该在哪里修改使用原型单元格创建的元素的字体、背景色等内容?

(id)initWithCoder:(NSCoder*)aDecoder
是正确的初始值设定项

试试这个:

@implementation TESTCell

- (id)initWithCoder:(NSCoder *)aDecoder
{
    self = [super initWithCoder:aDecoder];
    if (self) {
        self.textLabel.font = [UIFont boldSystemFontOfSize:25.0f];
    }
    return self;
}

@end
其他自定义(自己的子视图)转到:

它很好用。当然,您必须将序列图像板或界面生成器文件中的单元标识符设置为在UITableViewController中使用的相同标识符

我在UITableViewController中使用这段代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"TESTCell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
    cell.textLabel.text = @"TEST";
    return cell;
}
(id)initWithCoder:(NSCoder*)aDecoder
是正确的初始值设定项

试试这个:

@implementation TESTCell

- (id)initWithCoder:(NSCoder *)aDecoder
{
    self = [super initWithCoder:aDecoder];
    if (self) {
        self.textLabel.font = [UIFont boldSystemFontOfSize:25.0f];
    }
    return self;
}

@end
其他自定义(自己的子视图)转到:

它很好用。当然,您必须将序列图像板或界面生成器文件中的单元标识符设置为在UITableViewController中使用的相同标识符

我在UITableViewController中使用这段代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"TESTCell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
    cell.textLabel.text = @"TEST";
    return cell;
}

多巴尔丹。我刚才就是这么说的。如果我试图在init方法中定制一些东西,它就不能完成任务。假设您在原型单元中有一个按钮,它是使用Interface Builder创建的。按钮通过插座连接到该原型单元的自定义类。若您尝试在initWithCoder中更改该按钮的背景,则不会发生任何事情。如果您使用NSLog(@“%f”、self.customButton.frame.size.width),则即使不是,也会得到0。重写这个的唯一方法是创建我自己的函数-(void)customizeCell,并在每次[DequeueReusables…]之后调用它。我明白了。您必须将此自定义项放入awakeFromNib。我在上面编辑了我的答案。在awakeFromNib之前,您的自定义子视图尚未加载。现在这就是我搜索的答案。非常感谢你,先生。哈瓦拉!多巴尔丹。我刚才就是这么说的。如果我试图在init方法中定制一些东西,它就不能完成任务。假设您在原型单元中有一个按钮,它是使用Interface Builder创建的。按钮通过插座连接到该原型单元的自定义类。若您尝试在initWithCoder中更改该按钮的背景,则不会发生任何事情。如果您使用NSLog(@“%f”、self.customButton.frame.size.width),则即使不是,也会得到0。重写这个的唯一方法是创建我自己的函数-(void)customizeCell,并在每次[DequeueReusables…]之后调用它。我明白了。您必须将此自定义项放入awakeFromNib。我在上面编辑了我的答案。在awakeFromNib之前,您的自定义子视图尚未加载。现在这就是我搜索的答案。非常感谢你,先生。哈瓦拉!