ios mvc 中的view的界面的实现
2015-12-11 21:04
507 查看
1、纯粹代码
2、xib以及设置它的owner
在owner类的代码文件中写入上面的代码进行初始化,这样我们在(使用view的时候就可以直接获取到view。(也就是上中国面的view实现绑定xib在对应的view)
上面的这种方式进行定义界面的工具的时候出现错误:
如下:
原自定义控件出现[super initWithCoder:aDecoder]崩溃问题解决
今天尝试了一下autolayout与storyboard/xib来做UI,用起来还是感觉蛮得心应手的,再也不用担心写繁琐的UI代码了。故此也打算今后用xib来实现自定义控件(UIView Subclass),不料在做一个小例子的过程中遇到一个崩溃问题,崩溃位置发生在[super initWithCoder:aDecoder]的地方。
查看崩溃时的调用堆栈,竟然有很多个initWithCoder:函数,感觉像是无限循环递归调用一样。根据这篇文章的答案,才发现是因为自己将xib中view的Custom Class设置为ChildView(自定义控件的名称,继承于UIView)。
实际上只需要将xib中File's Owner设置为ChildView就行了。
*** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<UIView 0x7f9b19d56800> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key midTitle.'
所以,不要搞混淆了。
3、使用声明为class的时候是使用,这里使用的是类方法。
正是由于view界面的独立:我们经常会写代码文件+xib文件来写一些界面的工具,或者说是空间。写工具的时候,我们直接继承控件就好,eg:UIView,UIButton等等。
eg:类似tableView这样的或者IBinspectable这个关键字来实现在xib或者storyboard中设置显式设置属性。
不过我们经常也是会使用controller 直接创建以来的界面,所以vc就是一起的,view也就是一个单独的xib或者使用storyboard来实现都是可以的。
这个时候需要相应的方法实现初始化controller和view的xib界面进行绑定,也就是初始化的init……方法
这个方式进行初始化的时候可以查看链接如下:
http://blog.csdn.net/lvmaker/article/details/27177113
UIView中我们使用约束来进行对界面的拉伸,我们需要注意的有的时候拉伸应该多点关注约束的权限的优先级,
还有UIScrollView中我们拉伸约束的时候,注意放一个UIView在里面当contentView,这样就比较明显了。
还有今天突然明白了:UITableView其实就是UIScrollView,UIScrollView 其实就是UIView,也即是从子到父亲的关系,从复杂到简单的关系。
2、xib以及设置它的owner
- (instancetype)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { self.backgroundColor = [UIColor blueColor]; self.viewV.backgroundColor = [UIColor grayColor]; self.viewV = [[[NSBundle mainBundle] loadNibNamed:@"ViewView" owner:self options:nil]firstObject]; self.label.text = @"nihaoya"; // [self.viewV addSubview:self.label]; [self addSubview:self.viewV]; NSLog(@"zhixing"); } return self; }
在owner类的代码文件中写入上面的代码进行初始化,这样我们在(使用view的时候就可以直接获取到view。(也就是上中国面的view实现绑定xib在对应的view)
上面的这种方式进行定义界面的工具的时候出现错误:
如下:
原自定义控件出现[super initWithCoder:aDecoder]崩溃问题解决
今天尝试了一下autolayout与storyboard/xib来做UI,用起来还是感觉蛮得心应手的,再也不用担心写繁琐的UI代码了。故此也打算今后用xib来实现自定义控件(UIView Subclass),不料在做一个小例子的过程中遇到一个崩溃问题,崩溃位置发生在[super initWithCoder:aDecoder]的地方。
查看崩溃时的调用堆栈,竟然有很多个initWithCoder:函数,感觉像是无限循环递归调用一样。根据这篇文章的答案,才发现是因为自己将xib中view的Custom Class设置为ChildView(自定义控件的名称,继承于UIView)。
实际上只需要将xib中File's Owner设置为ChildView就行了。
*** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<UIView 0x7f9b19d56800> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key midTitle.'
所以,不要搞混淆了。
3、使用声明为class的时候是使用,这里使用的是类方法。
+ (ViewView *) viewViewWithTitle:(NSString*)title{ ViewView *viewView = [[[NSBundle mainBundle] loadNibNamed:@"ViewView" owner:nil options:nil] firstObject]; viewView.translatesAutoresizingMaskIntoConstraints = NO; viewView.labelView.text = title; return viewView; }这个和我们经常使用的tableView中的代码重用设置的方式是一样的。
正是由于view界面的独立:我们经常会写代码文件+xib文件来写一些界面的工具,或者说是空间。写工具的时候,我们直接继承控件就好,eg:UIView,UIButton等等。
eg:类似tableView这样的或者IBinspectable这个关键字来实现在xib或者storyboard中设置显式设置属性。
不过我们经常也是会使用controller 直接创建以来的界面,所以vc就是一起的,view也就是一个单独的xib或者使用storyboard来实现都是可以的。
这个时候需要相应的方法实现初始化controller和view的xib界面进行绑定,也就是初始化的init……方法
这个方式进行初始化的时候可以查看链接如下:
http://blog.csdn.net/lvmaker/article/details/27177113
UIView中我们使用约束来进行对界面的拉伸,我们需要注意的有的时候拉伸应该多点关注约束的权限的优先级,
还有UIScrollView中我们拉伸约束的时候,注意放一个UIView在里面当contentView,这样就比较明显了。
还有今天突然明白了:UITableView其实就是UIScrollView,UIScrollView 其实就是UIView,也即是从子到父亲的关系,从复杂到简单的关系。
相关文章推荐
- IOS核心动画
- iOS中通知中心(实例)
- iOS textField控件控制输入字符串的格式
- iOS开发53-Github和Source Tree的使用
- iOS常见错误6-The identity used to sign the executable is no longer valid.
- iOS speex
- iOS开发的各种小技巧
- iOS 协议代理
- iOS-文字自适应
- 当设置个人热点,状态栏变高造成布局出错的处理
- 151211使用Xcode和Instruments调试解决iOS内存泄露
- layer绘制渐变色
- [iOS]邮箱验证
- ARC下会导致内存泄漏的情况
- iOS在控制器中绘制圆形图像,二维码
- [iOS]NSString去除前后空格
- iOS 让图片变模糊
- iOS绘制字符串和图片
- 【iOS】“找不到使用指定主机名的服务器”
- iOS在线播放视频