美文网首页ios开发程序员iOS进阶指南
xib嵌套自定义xib的方法之一

xib嵌套自定义xib的方法之一

作者: luomagaoshou | 来源:发表于2016-06-20 04:10 被阅读1470次

尝试

当我尝试创建好利用xib一个自定义view

自定义xib

然后在别的xib中使用,为了方便观察,我把背景色设成orange

使用自定义xib

好了,我进行加载,看看结果。

加载完成图

???WTF,我的自定义view呢,好吧,我看打个断点看看怎么一回事。断点打在awakeFromNib中

断点查看属性

self的类型没有错,可以属性都为nil,看来apple不支持直接嵌套。

当系统加载xib时,会调用

- (nullable instancetype)initWithCoder:(NSCoder *)aDecoder

加载后,会调用

-(id)awakeAfterUsingCoder:(NSCoder *)aDecoder

加载完成后,最后调用

- (void)awakeFromNib

我们看到直接嵌套xib,只会加载到最底层的view,但是我们可以尝试在以上几个方法,经尝试,可以在- (nullable instancetype)initWithCoder:(NSCoder *)aDecoder与- (void)awakeFromNib加载自定义的nib作为subview,添加到self。

- (void)awakeFromNib

{

[super awakeFromNib];

//加载同名xib并添加到self

[self setupSelfNameXibOnSelf];

}


注意

创建xib有2点要注意

1.为了方便管理自定义view的outlet,创建的xib的file's Owner设置为本类,

 设置file's Owner为本类

2.view的Class不设置,避免递归调用(如果设置了view的Class,且在awakeFromNib加载nib,而该nib的Class与该类一样,又会调用awakeFromNib,会一直调用下去)

view的Class不设置

OK,建好后注意拉线的正确性,启动模拟器。

加载成功

现在我将button添加事件,看能不能正常使用。

- (void)viewDidLoad {

[super viewDidLoad];

[self.nestView.button addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside];

}

- (void)buttonClicked:(UIButton *)button

{

self.nestView.label.text = @"button被点击了";

self.nestView.textView.text = @"button真的被点击了";

[self.nestView.button setTitle:@"我真的被点击了" forState:UIControlStateNormal];

}

结果是能够正常响应。

测试成功


小结

这种实现方式其实是将file's Owner设置为自己用于管理属性,然后nib创建好当成subview添加上去。

此处应有demo

GitHub - luomagaoshou/MLNestNibDemo

参考文章

Nested Xib Views - 使用XIB实现嵌套自定义视图 - GeekerProbe

iOS xib 嵌套复用 - 开源中国社区

xib的动态桥接 - sunnyxx - 博客园

iOS Interface Builder:在.xib文件中加载另一个.xib文件 - backslash112 - 博客园

相关文章

  • xib嵌套自定义xib的方法之一

    尝试 当我尝试创建好利用xib一个自定义view 然后在别的xib中使用,为了方便观察,我把背景色设成orange...

  • UI-Xib

    Xib的加载 方法1 方法2 自定义控件view的步骤 新建自定义控件类 修改xib中view的类名 封装xib的...

  • iOS使用Xib自定义控件

    使用xib自定义一个简单的控件 XMGShopView xib效果图: 运行时效果图: xib自定义控件的创建方法...

  • Learning iOS D6 2017-10-27

    今日完成两个页面 !! 自定义cell 使用xib与不使用xib register 方法不同 使用xib做cell...

  • xib嵌套xib

    xib定制类嵌套在另一个xib中的方法 我不是一个经常使用xib的人,总感觉xib所见即得,非常简单,昨天同事在写...

  • xib嵌套xib

    近期迭代版本 有一个小需求 然后就想着用xib来写 然后就踩进了这个小坑因为嵌套的视图层有很多 所以需要UIVie...

  • iOS中xib与storyboard各种加载

    xib 加载自定义View xib 加载自定义控制器 storyboard 加载自定义控制器 xib 加载自定义cell

  • xib中嵌套使用xib

    在xib中嵌套使用xib,如果使用不正确会导致子xib最后加载不出来(具体原因可以查看第一篇参考文章)。可行的方法...

  • xib中嵌套使用xib

    在xib中嵌套使用xib,如果使用不正确会导致子xib最后加载不出来(具体原因可以查看第一篇参考文章)。可行的方法...

  • UIView

    view的封装 Xib和storyboard对比 Xib的加载 使用xib自定义view的步骤 l新建自定义控件类...

网友评论

  • 傲凡玉蝶:这样不就多套了一层view了吗?
  • blues_9d41:你好我也是用xib封装了一个view 然后在cell里面有3个view继承了这个自定义view 我在initwithcode里面加载了一次 最后只有一个view显示了出来 其余2个没有是怎么回事
    blues_9d41: @luomagaoshou 加载写错地方了😂还是不熟啊
    luomagaoshou: @blues_9d41 找到原因了吗,信息太少,想不出原因,但是有其中一个显示出来应该是可行的,是不是某个地方设置错误
  • 唤灵者:作者的分享精神是极好。可是语言组织能力好令人伤心呀。:smile:继续加油喔!
    唤灵者:@luomagaoshou 作者加油!:yum:
    luomagaoshou:@唤灵者 哈哈,我语言组织不太好,要继续学习
  • 青菜君:这个demo是空的啊 !!! :sweat:
    luomagaoshou:@青菜君 不好意思 已修复

本文标题:xib嵌套自定义xib的方法之一

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