用xib自定义UIView
来源:互联网 发布:淘宝店铺认证骗局 编辑:程序博客网 时间:2024/05/23 01:17
常用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) IBOutletUIView* contentView;
@property(weak , nonatomic) IBOutletUILabel* contentLabel;
@property(weak , nonatomic) IBOutletUIButton* transformButton;
@end
.m中重载方法
- (id)initWithCoder:(NSCoder *)aDecoder{
self = [superinitWithCoder:aDecoder];
if (self) {
[[NSBundlemainBundle] loadNibNamed:NSStringFromClass([selfclass]) owner:selfoptions:nil];
self.contentView.frame =self.bounds;
[selfaddSubview:self.contentView];
}
returnself;
}
xib中连线:
虽然label、button的直接父类是contentView,但是对外还是通过StoryBoardView的propriety属性。
在storyboard中
尽管看起来不是xib的样式,run起来就能看到了
为了兼容手写代码创建StoryBoardView,看习惯添加代码,比如:
- (instancetype)initWithFrame:(CGRect)frame{
self = [superinitWithFrame:frame];
if (self) {
[[NSBundlemainBundle] loadNibNamed:NSStringFromClass([selfclass]) owner:selfoptions:nil];
self.contentView.frame =self.bounds;
[selfaddSubview:self.contentView];
}
return self;
}
- 用xib自定义UIView
- 用xib自定义UIView视图
- 用xib文件自定义UIview的实现
- 自定义UIview关联xib
- 使用XIB自定义UIView
- 使用XIB自定义UIView
- iOS使用xib自定义uiview
- iOS使用xib自定义uiview
- iOS使用xib自定义UIView
- 使用XIB自定义UIView子类
- [iOS 使用xib自定义UIView]
- xcode 8自定义XIB自定义UIview
- IOS开发 使用XIB自定义一个UIView
- IOS开发 使用XIB自定义一个UIView
- IOS开发 使用XIB自定义一个UIView
- IOS开发 使用XIB自定义一个UIView
- IOS开发 使用XIB自定义一个UIView
- iOS开发--使用XIB自定义UIView
- LeetCode ZigZag Conversion
- 保护.net中的dll文件方法(防止破解、反编译dll)
- LeetCode-Gas Station(加油站问题)
- poj 3009 dfs暴力解决最短路
- 对安卓获取验证码倒计时60秒Button按钮的简单封装
- 用xib自定义UIView
- Java面试宝典
- Android webview使用详解
- Wood Flooring Advantage
- iOS证书申请教程
- 十六进制转八进制
- Ubuntu 安装telent server 并设置 root 用户telnet 远程登录
- box2d 函数 HelloWorld
- 超级好用Eclipse插件收藏