私は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イメージをオーバーレイしました。
私が言ったように、私は "View Identity"タブで私が望むものにクラスを設定しました。それは役に立ちませんでした - initWithCoderが呼び出されません。 – Sergey
サンプルプロジェクトを投稿できますか? –