免费开源的iOS开发学习平台

UIView详解:10-使用xib创建自定义UIView

在开发过程中,经常需要根据需求去定制各种式样的UIView对象。当需要定制UIView类时,可以使用纯代码以及Xib两种方式,在实现方法上稍有区别,但是有些共同的注意点必须特别关注,最好按照苹果建议的步骤和要求来创建自定义UIView。

使用Xib创建自定义UIView的步骤

当使用Xib创建自定义UIView时,建议大家按照如下步骤进行:

  • 新增一个NibView类,继承自UIView

  • 新增一个xib文件,命名为NibView.xib

  • 指定该xib文件对应的类

  • 使用Xib绘制UIView的界面,添加子视图并设置约束关系;

  • 由于使用xib在初始化时不会调用initWithFrame:方法,而是调用initWithCoder:方法,因此,建议在.h文件中定义一个类方法initFromNib,并在.m文件中对该方法进行实现。该方法的主要功能时从xib中加载,该方法会调用initWithCoder:方法。如下所示:
//  NibView.h 
import <UIKit/UIKit.h> 
@interface NibView : UIView 
@property (weak, nonatomic) IBOutlet UIView *subView;
+(NibView *)initFromNib; 
@end
/**
 *  从Nib中取出对象,会调用initWithCoder:
 *
 *  @return
 */
+(NibView *)initFromNib{
    NSLog(@"%s",__func__);
    return [[[NSBundle mainBundle] loadNibNamed:@"NibView" owner:self options:nil] lastObject];
} 

- (instancetype)initWithCoder:(NSCoder *)coder
{
    NSLog(@"%s",__func__);
    self = [super initWithCoder:coder];
    if (self) {       
    }
    return self;
}
  • 假如需要对自定义UIView进行进一步的定制,定制代码可以写在awakeFromNib方法中;
//用于定制View的样式,使用Xib建议在awakeFromNib中设置视图属性
-(void)awakeFromNib{
    NSLog(@"%s",__func__);
    self.alpha = 0.5;
}
  • 当需要对子视图进行重新布局的时候,实现layoutSubViews方法;
  • 当需要做自定义绘图的时候,实现drawRect:方法(同代码创建自定义View);
  • 如果视图需要响应用户交互,如点击等,可以为视图添加手势或者实现UIResponder类的touches系列方法(同代码创建自定义View)。

官方文档

https://developer.apple.com/library/ios/documentation/WindowsViews/Conceptual/ViewPG_iPhoneOS/CreatingViews/CreatingViews.html#//apple_ref/doc/uid/TP40009503-CH5-SW23

示例代码

https://github.com/99ios/7.2.10