0

UITableViewxib ファイルを使用するカスタム セルがあります。UILabel高さ 200、幅 50 のをプログラムで作成しました。ラベルの幅と高さの in を実行すると、w: 50 と h: 200NSLogが得られます。高さと幅。customCell.mNSLogmainViewController.m

なぜそうするのかわからない。ラベルの実際の高さを取得する必要があります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 ファイルを使用する場合、 atawakeFromNibが呼び出されるはずがありませんか? そうでない場合、どのように呼び出すのですか?mainViewController.mviewDidLoadviewDidLoad

4

1 に答える 1

0

awakeFromNibnib からロードするときに呼び出される初期化子です。つまり、ビューを追加し、そのクラスをストーリーボード/nib のカスタム クラスに変更すると、このプロセスはメソッドを呼び出します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 に答える