0

UITableView我在使用 xib 文件中有一个自定义单元格。我以编程方式创建了UILabel一个高度为 200,宽度为 50。当我NSLogcustomCell.m标签的宽度和高度中执行时,它给了我 w:50 和 h:200。但是当我执行时NSLogmainViewController.m它给了我 0高度和宽度。

不知道为什么会这样。我需要在mainViewController.m

这是我的代码:

customCell.m

- (void)awakeFromNib
{
    self.label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 50, 200)];
    [self.label setText:@"This is a label"];
    [self.myView addSubview:self.label];

    NSLog(@"%f", self.label.frame.size.height);  // Results: 200.0000
}

mainViewController.m

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.

    customCell *cellVC = [[cutsomCell alloc] init];

    NSLog(@"%f, %f", cellVC.label.frame.size.height); // Results: 0.0000
}

如果我使用 xib 文件,不awakeFromNib应该被称为mainViewController.mat吗?viewDidLoad如果没有,我该如何调用它viewDidLoad

4

1 回答 1

0

awakeFromNib是从笔尖加载时调用的初始化程序..即您添加一个视图并将其类更改为故事板/笔尖中的自定义类,这个过程将调用awakeFromNib方法..不是以编程方式

以编程方式完成后,使用 init 方法或自定义初始化程序

-(id)init
{
    //class super init calls

    //then method calls
    self.label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 50, 200)];
    [self.label setText:@"This is a label"];
    [self.myView addSubview:self.label];

    //return self
}

例子

- (id) init {
    // Call superclass's initializer
    self = [super init];
    if(self) {
        self.label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 50, 200)];
        [self.label setText:@"This is a label"];
        [self.myView addSubview:self.label];
    }
    return self;
}
于 2015-02-02T20:40:01.383 回答