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

从xib初始化的UIView如何继承?

通过 Interface Builder 更改 UIView 属性

UIView 转换仅在 UIView 是通过 Interface Builder 创建时才有效

通过 monotouch 绑定在 Interface Builder 中创建为 UIView 的自定义控件

从 UIView 子类创建 CGImage