UIView 的子类。如何通过 Interface Builder 添加?
Posted
技术标签:
【中文标题】UIView 的子类。如何通过 Interface Builder 添加?【英文标题】:Subclass of UIView. How to add through Interface Builder? 【发布时间】:2012-04-28 07:15:09 【问题描述】:我有一个 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】:在 Xcode 中显示您的 .xib 时,显示右侧窗格,选择您的视图,然后在第三个选项卡中,将 Class
更改为您想要的任何内容。
【讨论】:
正如我所说,我在“查看身份”选项卡中将课程设置为我想要的。它没有帮助 - initWithCoder 没有被调用。 你能发布一个示例项目吗?以上是关于UIView 的子类。如何通过 Interface Builder 添加?的主要内容,如果未能解决你的问题,请参考以下文章
来自 Interface Builder 的自定义 UIView
通过 Interface Builder 更改 UIView 属性
UIView 转换仅在 UIView 是通过 Interface Builder 创建时才有效