IB

作者: ienos | 来源:发表于2020-04-20 00:40 被阅读0次

    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 ,设置 ClassxxxViewControler
    • 第三步:Control + Files's Owner , 里面有个默认的 IBOutlet 变量 view, 看一下后面有没有做关联,如果没有就拉到下面的 View 和视图做个关联
    • 第四步:还有可能是 xcode 的问题,xcode 本身自带记忆功能,可能你已经修改,或者删除,但是 xcode 无法识别,继续用默认的,所以出上面方法以外,可以重新建立 xib 并且给予不同 view 名字
    第二种原因 :当你的控制器的文件名称跟你用 xib 描述的一个 view 的名称很像

    当有一个控制器 SignViewController ,它在走初始化方法的时候会去找对应的 xib,如果没有它会找 SignViewxib,此时你的 控制器 会加载你自定义视图的 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

    1. ChildViewXib 设置 File's OwnerCustom ClassChild View
    2. File's OwnerOutletsView 上,并且拉 ViewChildView.m IBOutlet
    3. 最后在 Child View 的初始化方法上添加一个 setUp 方法
    - (void)setUp {
      [[NSBundle mainBundle]loadNibNamed:@"MainView" owner:self options:nil];
      self.view.frame = self.bounds;
      [self addSubview:self.view];
    }
    
    1. MainView Xib 上添加一个 UIView 并设置该 Custom ClassChildView

    若使用代码添加 ChildView,只需调用它的初始化方法,无需再调 [[NSBundle mainBundle]loadNibNamed:@"MainView" owner:self options:nil];

    xib 初始化 ViewController

    viewController 使用转场动画中,view 的大小获取到的是 xib 中的大小,需要在转场之前初始化 view 的 frame

    使用 XIB 自定义视图

      1. 设置 XIB 中的 viewCustom Class 为该类
      1. 初始化视图,可添加 UIView Extension
    + (instancetype)viewWithXib {
      return [[NSBundle mainBundle]loadNibNamed:NSStringFromClass(self) owner:self options:nil].firstObject;
    }
    

    相关文章

      网友评论

          本文标题:IB

          本文链接:https://www.haomeiwen.com/subject/ollnbhtx.html