IB
在 IB 中换行
option + 回车
IBInspectable - IBDesignable
@property(nonatomic,strong) IBInspectable UIColor* textColor;
'-[UIViewController _loadViewFromNibNamed:bundle:] loaded the "XXXView" nib but the view outlet was not set.’,原因是没有做 nib 文件到 xxxViewControler 的关联
第一种原因:当你这个控制器的 view 是通过 xib 加载的,但是在 xib 里面并没有绑定 file's Owner,
- 第一步:打开 nib 文件
- 第二步:点击 File's Owner, 按 command+4 ,设置 Class 为 xxxViewControler
- 第三步:按 Control + Files's Owner , 里面有个默认的 IBOutlet 变量 view, 看一下后面有没有做关联,如果没有就拉到下面的 View 和视图做个关联
- 第四步:还有可能是 xcode 的问题,xcode 本身自带记忆功能,可能你已经修改,或者删除,但是 xcode 无法识别,继续用默认的,所以出上面方法以外,可以重新建立 xib 并且给予不同 view 名字
第二种原因 :当你的控制器的文件名称跟你用 xib 描述的一个 view 的名称很像
当有一个控制器 SignViewController ,它在走初始化方法的时候会去找对应的 xib,如果没有它会找 SignView 的 xib,此时你的 控制器 会加载你自定义视图的 xib ,导致报错。
xib this class is not key value coding-compliant for
使用 xib 不能重写 loadview
通过 xib 加载的控件, 除了取消 autoLayout, 否则无法更改其 frame
利用一个 xib 创建多个自定义视图,获取视图
for (UIView *view in [[UINib nibWithNibName:@"CommonView" bundle:nil] instantiateWithOwner:self options:nil]) {
if ([view.restorationIdentifier isEqualToString:@"RemarksView"]) {
return view;
}
}
在 xib 文件中加载另一个 xib 文件
假设 父视图 MainView,子视图 ChildView
- ChildView 的 Xib 设置 File's Owner 的 Custom Class 为 Child View
- 拉 File's Owner 的 Outlets 到 View 上,并且拉 View 到 ChildView.m IBOutlet
- 最后在 Child View 的初始化方法上添加一个 setUp 方法
- (void)setUp {
[[NSBundle mainBundle]loadNibNamed:@"MainView" owner:self options:nil];
self.view.frame = self.bounds;
[self addSubview:self.view];
}
- 在 MainView Xib 上添加一个 UIView 并设置该 Custom Class 为 ChildView
若使用代码添加 ChildView,只需调用它的初始化方法,无需再调
[[NSBundle mainBundle]loadNibNamed:@"MainView" owner:self options:nil];
xib 初始化 ViewController
viewController 使用转场动画中,view 的大小获取到的是 xib 中的大小,需要在转场之前初始化 view 的 frame
使用 XIB 自定义视图
- 设置 XIB 中的 view 的
Custom Class
为该类
- 设置 XIB 中的 view 的
- 初始化视图,可添加
UIView Extension
- 初始化视图,可添加
+ (instancetype)viewWithXib {
return [[NSBundle mainBundle]loadNibNamed:NSStringFromClass(self) owner:self options:nil].firstObject;
}
网友评论