1
我有一個UITextField的子類,並希望能夠將其添加到IB中的視圖。我所做的是添加UITextField,並將其類更改爲Inspector的Identity選項卡中的我的子類。但我只能在視圖上看到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
編輯:我注意到幾件事情:
- 如果我把[超級initWithFrame:方法...]而不是[超級的initWithCoder:...]內
(ID)的initWithCoder:(NSCoder *)aDecoder
它工作得很好。
- 現在我正在使用awakefromnib而不是initwithcoder,並且唯一在textfield中被更改的是textColor。 有人可以解釋爲什麼這樣嗎?
解決方案我需要將邊框樣式設置爲無。 BS覆蓋bg圖像。
正如我所說,我在「視圖標識」選項卡中將類設置爲我想要的。它沒有幫助 - initWithCoder不會被調用。 – Sergey 2012-04-28 11:30:47
你可以發佈一個示例項目嗎? – 2012-04-28 12:35:23