美文网首页iOS Developer
xib自定义view的这点事

xib自定义view的这点事

作者: revon | 来源:发表于2016-11-22 17:06 被阅读117次

我们知道创建一个集成UIView的控件的时候,不能像viewcontroller那样有一个xib,但是又想用xib来布局这个view,这时候就要自定义一个view的xib文件了。
创建一个view的子类customView继承UIView
紧接着创建一个xib,选择

view.png

下一步的save as名字可以随便取,建议取成和子类view相同的名字,这里我取得是customView
接下来,把这个view的class改为


屏幕快照 2016-11-22 下午4.26.58.png

这样,你可以在上边愉快的拉控件来布局了,但是怎么用呢
在用的时候,可以这样

customView *customV = [[[NSBundle mainBundle] loadNibNamed:@"customView" owner:self options:nil] firstObject];

此时,在这个xib中,view的大小默认是屏幕的大小,如果你想用熟悉的initWithFrame,可以这样,在customView.m中,重写initWithFrame方法

- (instancetype)initWithFrame:(CGRect)frame {
    self = [super initWithFrame: frame];
    if (self) {
        UIView *vi = [[[NSBundle mainBundle] loadNibNamed:@"customView" owner:self options:nil] firstObject];
        vi.frame = frame;
        [self addSubview:vi];
    }
    return self;
}

注意,这里如果你用了拉约束的方法,很多是没用的(设置水平中心和竖直中有用,也就是视图中心点跟父视图一样),这里你可以把约束拉出来成为一个属性,在你需要的时候,设置这个属性就行了。这算是也是一个弊端吧。
接下来,坑来了
如果你在这个xib的view上增加了一个viewOther,在这个viewOther上,你再拉控件,这时候,在viewOther上的控件约束有用了,你想说,这下就可以愉快的用约束了(前提是你的viewOther设置好了约束)。有一个问题,你将控件拉成属性,是在customView中,你给控件赋值是没问题的,如果你想设置圆角啊,边框啊这些属性,你如果在

- (instancetype)initWithCoder:(NSCoder *)aDecoder

里边写,是没有效果的,这个方法是走了的,但是就是没效果(原因就是这个方法是初始化costomView的,这个时候,viewOther上的控件,不确定是不是初始化好了)
有些同学可能会在xib中,用kvc的方式来改变,但是边框颜色是用不来这个的,解决方法很简单,代码如下

//customView的初始化方法里
- (instancetype)initWithCoder:(NSCoder *)aDecoder {
    self = [super initWithCoder:aDecoder];
    if (self) {
        [self layoutIfNeeded];
    }
    return self;
}

在这里

- (void)layoutSubviews {
    //coding what you wang to set
}

这样,你所有的子view上的控件就会有你想要的效果了。好了,愉快的自定义view吧

相关文章

  • xib自定义view的这点事

    我们知道创建一个集成UIView的控件的时候,不能像viewcontroller那样有一个xib,但是又想用xib...

  • UIView

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

  • UI-Xib

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

  • iOS中xib与storyboard各种加载

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

  • xib自定义,高度减少64

    解决在导航栏不透明的情况下,自定义xib view高度被压缩64的问题 在使用xib自定义view的时候,个人习惯...

  • Failed to set user defined inspe

    Log: 原因 :使用自定义的 view 时,为 view 设置了 IBInspectable 属性,在 xib ...

  • 自定义View的创建、添加、移除执行过程分析

    1.创建自定义view的类文件 2.创建一个xib文件来表述自定义view(也可以通过代码) 创建一个xib文件创...

  • XIB写 UI练习

    1.创建一个自定义View 2.创建一个XIB文件 最好与创建的View同名 或者在创建View时直接生成xib ...

  • xib在代码中调整

    1,自定义view继承uiview。创建xib文件绑定该view以及元素2,在自定义view内部创建一个初始化方法...

  • iOS:在xib文件中使用另外一个xib文件

    在自定义View的时候我们会遇到在一个xib文件中用到一个View,而这个View也是用xib文件定义的,接下来就...

网友评论

    本文标题:xib自定义view的这点事

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