2012-04-28 11 views
1

私はUITextFieldのサブクラスを持ち、それをIBのビューに追加できるようにしたいと考えています。私がやったことは、UITextFieldを追加し、インスペクタの[ID]タブでそのクラスを自分のサブクラスに変更しました。しかし、私はUITextFieldがビュー上にしか見えません。UIViewのサブクラスです。 Interface Builderを使用して追加するには?

コード:

@interface ExtendedTextField : UITextField { 
} 

//implementation 


@implementation ExtendedTextField 

- (void)baseInit 
{ 
    UIImage * curImage = [UIImage imageNamed:@"tfbg.png"]; 
    [self baseInitWithImage : curImage]; 
} 

- (void)baseInitWithImage : (UIImage *) aImage 
{ 
    aImage = [aImage stretchableImageWithLeftCapWidth:29 topCapHeight:29]; 
    self.background = aImage; 
    self.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter; 

    UIView * curLeftView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 10, self.frame.size.height)]; 

    self.leftView = curLeftView; 
    self.rightView = curLeftView; 
    [curLeftView release]; 
    self.leftViewMode = UITextFieldViewModeAlways; 
    self.rightViewMode = UITextFieldViewModeAlways; 
    [self setTextColor:[UIColor greenColor]]; 
} 

- (void)awakeFromNib 
{ 
    [super awakeFromNib]; 
    [self baseInit]; 
} 

/* 
- (id)initWithCoder:(NSCoder *)aDecoder 
{ 
    self = [super initWithCoder:aDecoder]; 
    if (self) { 
     [self baseInit]; 
    } 
    return self; 
} 
*/ 

- (id)initWithFrame:(CGRect)frame { 
    self = [super initWithFrame:frame]; 
    if (self) 
    { 
     [self baseInit]; 
    } 
    return self; 
} 

- (id)initWithFrame:(CGRect)frame withImage:(UIImage*)aImage 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 
     [self baseInitWithImage : aImage]; 
    } 
    return self; 
} 

- (void)dealloc { 
    [super dealloc]; 
} 


@end 

EDIT:私はいくつかのことに気づいた:

- 私は[スーパーinitWithFrame:...]置けば代わりの[スーパーをinitWithCoder:...]内部

(ID)initWithCoder:(NSCoder *)aDecoder

それがうまく動作します。

- 私はinitwithcoderの代わりにawakefromnibを使用しています。テキストフィールドで変更されるのはtextColorだけです。 誰かが理由を説明できますか?

解決策境界線スタイルをnoneに設定する必要がありました。 BSはbgイメージをオーバーレイしました。

答えて

1

Xcodeで.xibを表示しているときに、右側のペインを表示して、ビューを選択し、3番目のタブでClassに変更します。

+0

私が言ったように、私は "View Identity"タブで私が望むものにクラスを設定しました。それは役に立ちませんでした - initWithCoderが呼び出されません。 – Sergey

+0

サンプルプロジェクトを投稿できますか? –

関連する問題