我有一个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图像。
答案 0 :(得分:1)
在Xcode中显示.xib时,显示右侧窗格,选择您的视图,然后在第三个标签中,将Class
更改为您想要的内容。