UIView的子类。如何通过Interface Builder添加?

时间:2012-04-28 07:15:10

标签: objective-c uiview interface-builder subclass

我有一个UITextField的子类,希望能够将它添加到IB中的视图中。我做的是添加UITextField并将其类更改为Inspector的Identity选项卡中的子类。但我只能在视图上看到UITextField。

代码:

@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

编辑:我注意到了几件事:

- 如果我把[super initWithFrame:...]而不是[super initWithCoder:...]放在

(id)initWithCoder:(NSCoder *)aDecoder

效果很好。

- 现在我使用awakefromnib而不是initwithcoder,在textfield中唯一改变的是textColor。 有人可以解释为什么会这样吗?

解决方案我需要将边框样式设置为无。 BS覆盖了bg图像。

1 个答案:

答案 0 :(得分:1)

在Xcode中显示.xib时,显示右侧窗格,选择您的视图,然后在第三个标签中,将Class更改为您想要的内容。