自定义 View

自定义UI 的作用是为了提高效率,满足需求!尤其是复杂的UI,xib 效率会更好一些。

2种常用方式 xib 和 纯代码

*** xib 和 存代码 也可以这么理解:如果不用xib文件的话用initWithFrame做初始化,用xib的话用awakeFromNib初始化 ***

纯代码

(代码就不贴了,想要demo的话,我可以放到Github, 有什么事可以isuse 我哈!)

1、自定义一个 HZCustomShareView : UIView

a、通常情况下,自定义View 的话都使用 代理设计模式。(其实就是套路)


自定义 View_第1张图片
Snip20161009_4.png

b、在.m 文件里 重写init 方法---》 写布局 -----》重写方法计算子控件大小 (其实又是套路)。


自定义 View_第2张图片
Snip20161009_3.png

重写计算子控件:

自定义 View_第3张图片
Snip20161009_2.png

经过简单的步骤后,直接在其它 控制器里 懒加载,调用就可以了。(好吧,又是套路),下面的图哪个注释的代码也是可以的哈。

自定义 View_第4张图片
Snip20161009_1.png

xib 自定义

》当建立控制器并勾选XIB的时候,是控制器的时候,不会走- (void)awakeFromNib方法,需要在- (void)viewDidLoad里面书写相应的操作。只有当建立UIView的时候并勾选XIB的时候才会走- (void)awakeFromNib方法。切记!

-(void)awakeFromNib;从字面上理解,就是从nib文件中唤醒对象,完成对每一个对象的实例化或与nib文件的关联。

.

谁唤醒这个方法?
答:awakeFromNib是由nib loading machinery发出的。[NSBundle loadNibFile:externalNameTable:withZone:],加载nib文件,完成初始化设置和连接,并且在所有关联的对象上唤醒awakeFromNib方法。
感谢!!!
.

谁响应这个方法?

Cunstom Controller 和Cunstom Window都会响应awakeFromNib方法。当一个nib文件已经完成所有对象的加载之后,会对每一个与nib文件关联的对象loop back。此时,如果awakeFromNib方法中有需要响应的对象,它就会在该对象上唤起awakeFromNib方法。因此,我们可以在awakeFromNib方法中操作任何甚至所有的nib中的对象。

需要注意的问题:
当使用一个controller控制多个nib文件时,awakeFromNib方法会被多次调用。因此,当不使用awakeFromNib方法来完成nib对象的初始化时,需要注意此方法的多次调用对其他nib文件造成的影响
常用的是 表视图的 cell。那个简单,这里不介绍了,下面介绍的是普通的View

1、自定义一个UIView 类


自定义 View_第5张图片
Snip20161009_5.png

2、在init方法里填上如下:

自定义 View_第6张图片
Snip20161008_3.png

是代码:加载xib
- (instancetype)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {

    CGRect frame = self.frame;
    frame.size.width = self.frame.size.width;
    [self setFrame:frame];
    
    UIView *view = nil;
    view.backgroundColor = [UIColor redColor];
    NSArray* nibView =  [[NSBundle mainBundle] loadNibNamed:@"ParentsView" owner:self options:nil];
    for (id obj in nibView) {
        if ([obj isKindOfClass:[UIView class]]) {
            view = obj;
            break;
        }
    }
    
    if (view != nil) {
        view.translatesAutoresizingMaskIntoConstraints = NO;
        [self addSubview:view];
    }
    
}
return self;
}

然后在控制器了,懒加载,调用就可以了。
运行效果:(嗯,还需适配调整)

自定义 View_第7张图片
Snip20161008_4.png

你可能感兴趣的:(自定义 View)