4

1つのラベルと1つのテキストフィールドを持つカスタムUITableViewCellを(プログラムで、サブクラス化して)作成しています。

このコード

#import "TextCell.h"

@implementation TextCell

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        UITextField *subjectField = [[UITextField alloc] initWithFrame:CGRectMake(59, 11, 399, 21)];

        subjectField.font = [UIFont systemFontOfSize:17];
        subjectField.placeholder = @"(placeholder)";

        [self.contentView addSubview:subjectField];

        self.textField = subjectField;
    }
    return self;
}

結果として非表示のテキストフィールドになります:

不可視フィールドのスクリーンショット

ただし、このセルを選択すると、テキストフィールドが表示されます。

ここに画像の説明を入力してください

実装すれば

- (void)layoutSubviews
{
     self.textField.frame = CGRectMake(59, 11, 399, 21);

     /* thus text field init method becomes initWithFrame:CGRectZero;
}

テキストフィールドは表示されますが、ラベルが消え、セルの幅が突然大きくなります。

ここに画像の説明を入力してください

正しい方向に向けてください。

4

1 に答える 1

5

最初の試行では、テキストフィールドはラベルの後ろにあるため、表示されません。それがあなたが使っているセルの標準ラベルだと思いますか?アクセスするまで作成されません。デフォルトではセルの全幅であるため、テキストフィールドをカバーします。これを回避するには、特定のフレームで独自のカスタムラベルを使用してください。

2番目の例では、電話をかけるのを忘れています[super layoutSubviews]。これは非常に重要です。

于 2012-09-22T07:06:26.447 に答える