2

いくつかのサブビューを持つUIViewの単純なサブクラスを作成しましたが、表示できない理由で壊れています。

ストーリーボードビューコントローラーで、UIViewを追加して希望の形にし、カスタムクラスを追加しました。私のサブクラスの内容は以下のとおりです。

@implementation PersonDetailCell

@synthesize button, requiredMarker, textField;

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code

    }
    return self;
}

-(void)layoutSubviews
{
    [self setBackgroundColor:[UIColor colorWithRed:87.0f/255.0f green:153.0f/255.0f blue:191.0f/255.0f alpha:1.0f]];

    textField = [[DetailTextField alloc] initWithFrame:CGRectMake(10, 0, self.frame.size.width -20, self.frame.size.height)];
    [textField setFont:[UIFont fontWithName:@"Helvetica" size:14.0f]];
    [textField setTextColor:[UIColor whiteColor]];
    [textField setHidden:YES];
    [self addSubview:textField];

    button = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
    [button setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
    [button setHidden:YES];
    [self addSubview:button];

    requiredMarker = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 4, 22)];
    [requiredMarker setBackgroundColor:[UIColor redColor]];
    [requiredMarker setHidden:YES];
    [self addSubview:requiredMarker];
}

/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect
{
    // Drawing code
}
*/

@end

次に、View Controllerコードで、サブクラスをインポートし、そのIBOutletをストーリーボードのビューに接続しました。ビューコントローラのviewDidLoadで、このビューの背景色も設定しようとしましたが、何も起こりません。

私のコードはすべてクラッシュすることなく実行されますが、私の問題は次のとおりです。

  1. ビューコントローラから背景色を設定できません(またはその他のプロパティ)。

  2. アプリを実行すると、ストーリーボードで設定した高さよりも高さが高くなります(幅は問題ありません)が、ビューの高さはどこにも変更されません。

何か案は?どういうわけか間違ったアプローチを使用していますか?

ありがとう。

4

2 に答える 2

1

テーブルセルの場合、クラスはUITableViewCellを拡張する必要があります。ボタンとテキストフィールドをストーリーボードに追加できます。次に、支柱とバネ([サイズインスペクター]ペイン)を使用して、ビューのサイズが適切に変更されるようにします。新しいUI要素を追加するためにlayoutSubviewsを使用するべきではないと思います(手動で行う必要がある場合は、サイズを変更するためかもしれません)。

于 2012-11-08T00:28:01.580 に答える
0

いくつかの動作するコードは次のとおりです。

@interface ChildView()
@property (strong, nonatomic) UITextField *textField;
@property (strong, nonatomic) UIButton *button;
@property (strong, nonatomic) UIImageView *requiredMarker;
@end

@implementation ChildView

@synthesize textField= _textField;
@synthesize button = _button;
@synthesize requiredMarker = _requiredMarker;

-(id)initWithCoder:(NSCoder *)aDecoder
{
    self = [super initWithCoder:aDecoder];
    if (self)
    {
        [self setBackgroundColor:[UIColor colorWithRed:87.0f/255.0f green:153.0f/255.0f blue:191.0f/255.0f alpha:1.0f]];

        self.textField = [[UITextField alloc] init];
        [self.textField setFont:[UIFont fontWithName:@"Helvetica" size:14.0f]];
        [self.textField setTextColor:[UIColor whiteColor]];
        self.textField.text = @"Test text";
        [self addSubview:self.textField];

        self.button = [[UIButton alloc] init];
        self.button.backgroundColor = [UIColor greenColor];
        [self addSubview:self.button];

        self.requiredMarker = [[UIImageView alloc] init];
        [self.requiredMarker setBackgroundColor:[UIColor redColor]];
        [self addSubview:self.requiredMarker];
    }
    return self;
}

-(void)layoutSubviews
{
    CGSize hostSize = self.frame.size;
    float length = 22;
    self.textField.frame = CGRectMake(10, length, hostSize.width, hostSize.height-length);
    self.button.frame = CGRectMake(0, 0, hostSize.width, length);
    self.requiredMarker.frame = CGRectMake(0, 0, 4, length);
}

@end
于 2012-11-08T15:59:56.157 に答える