码迷,mamicode.com
首页 > 其他好文 > 详细

用xib自定义UIView

时间:2015-02-06 15:04:13      阅读:91      评论:0      收藏:0      [点我收藏+]

标签:

常用xib的基本上都是UITableViewCell,今天动手拖出来个UIView的子类。

打开工程新建一个view:StoryBoardView.新建view不能创建xib,需要手动创建一个xib


技术分享

打开这个新建的xib。

拖上去一个label,一个button,暂时别连线。

技术分享

拖着个xib的时候,可能第一反应就是先将这个view指向StoryBoardView,这个时候千万别指向自定义的View,后面解释


技术分享

将file‘s owner 指向 StoryboardView

技术分享

现在说明下原因:如果在storyboard中的一个vc中拖了一个View,指向StoryBoardView,View加载时候回调用 StoryBoardView的 

- (id)initWithCoder:(NSCoder *)aDecoder + - (void)awakeFromNib.

   但是实例化一个xib对象的StoryBoardView是通过

- (NSArray *)loadNibNamed:(NSString *)name owner:(id)owner options:(NSDictionary *)options;

   方法来获取的。

这就两难了:想在storyboard中拖一个StoryBoardView到一个VC,但是得到的却是一个空白的View;通过代码loadnibname,就不能用storyboard方便的添加约束;

这个时候就需要添加一个中间层了。把xib实例化出来的View当做StoryBoardView的一个subview。

具体就是,重载initWithCoder,在内部调用loadNibName,把这个获取到的View再添加到self上就好了。

这样即使通过storyboard拖的,有load自己的xib了。

在.h中添加属性

@interface StoryBoardView : UIView

@property(weak , nonatomic) IBOutlet UIView* contentView;

@property(weak , nonatomic) IBOutlet UILabel* contentLabel;

@property(weak , nonatomic) IBOutlet UIButton* transformButton;


@end


.m中重载方法

- (id)initWithCoder:(NSCoder *)aDecoder{

    self = [super initWithCoder:aDecoder];

    if (self) {


        [[NSBundle mainBundle] loadNibNamed:NSStringFromClass([self class]) owner:self options:nil];

        self.contentView.frame = self.bounds;

        [self addSubview:self.contentView];

    }

    return self;

}


xib中连线:

技术分享

虽然label、button的直接父类是contentView,但是对外还是通过StoryBoardView的propriety属性。

在storyboard中

技术分享

尽管看起来不是xib的样式,run起来就能看到了


技术分享




为了兼容手写代码创建StoryBoardView,看习惯添加代码,比如:

- (instancetype)initWithFrame:(CGRect)frame{

    self = [super initWithFrame:frame];

    if (self) {

        [[NSBundle mainBundle] loadNibNamed:NSStringFromClass([self class]) owner:self options:nil];

        self.contentView.frame = self.bounds;

        [self addSubview:self.contentView];

    }

    return self;

}










用xib自定义UIView

标签:

原文地址:http://blog.csdn.net/growinggiant/article/details/43563037

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!