文档章节

iOS开发之使用xib自定义View的步骤

shenhuniurou
 shenhuniurou
发布于 2016/03/03 22:42
字数 841
阅读 23
收藏 0

1、首先创建一个view对象文件继承自UIView

2、再创建一个xib文件,命名和自定义view相同(其实Xcode创建view文件的时候就有一个选项提示:Also create XIB file,我猜想是创建View文件时同时创建同名的xib文件,但是现在是无法勾选的,我还不知道原因,所以现在只能单独创建),注意要选择User Interface里面的View

这样就得到了三个同名的文件(我就以Book为例)


3、修改xib文件中的类名,因为我们原先创建的xib文件是UIView类型,但是要把它改成我自定义的view类型

把UIView改成我刚刚创建的自定义View名:XXBookView

4、把xib的加载过程封装到自定义view的构造方法中,还要给自定义view增加一个XXBook的模型属性,用来设置数据。

模型XXbook:

//
//  XXBook.h
//  CustomViewWithXib
//
//  Created by Daniel on 16/3/3.
//  Copyright © 2016年 Daniel. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface XXBook : NSObject

/** 图书封面 */
@property(nonatomic, strong) NSString *bookImage;

/** 图书作者 */
@property(nonatomic, strong) NSString *bookAuthor;

/** 图书价格 */
@property(nonatomic, strong) NSString *bookPrice;

@end

自定义View:

//
//  XXBookView.h
//  CustomViewWithXib
//
//  Created by Daniel on 16/3/3.
//  Copyright © 2016年 Daniel. All rights reserved.
//

#import <UIKit/UIKit.h>
@class  XXBook;

@interface XXBookView : UIView

/** 图书模型属性 */
@property(nonatomic, strong) XXBook *book;

+ (instancetype)bookView;

+ (instancetype)bookViewWithBook:(XXBook *)book;


@end
//
//  XXBookView.m
//  CustomViewWithXib
//
//  Created by Daniel on 16/3/3.
//  Copyright © 2016年 Daniel. All rights reserved.
//

#import "XXBookView.h"
#import "XXBook.h"

@implementation XXBookView

+ (instancetype)bookView {
    
    return [self bookViewWithBook:nil];
    
}

+ (instancetype)bookViewWithBook:(XXBook *)book {
    
    //这里用同名xib的好处就体现了,用NSStringFromClass方法获得的类名也就是xib文件名,不用手动输,避免写错
    XXBookView *bookView = [[[NSBundle mainBundle]loadNibNamed:NSStringFromClass(self) owner:nil options:nil] firstObject];
    
    bookView.book = book;
    return bookView;
    
}


@end

5、在类扩展中增加子控件属性,关联xib中的子控件

//
//  XXBookView.m
//  CustomViewWithXib
//
//  Created by Daniel on 16/3/3.
//  Copyright © 2016年 Daniel. All rights reserved.
//

#import "XXBookView.h"
#import "XXBook.h"

/** 类扩展中增加子控件属性,关联xib中的子控件 */
@interface XXBookView()

@property (weak, nonatomic) IBOutlet UIImageView *bookView;

@property (weak, nonatomic) IBOutlet UILabel *authorLable;

@property (weak, nonatomic) IBOutlet UILabel *priceLable;

@end

@implementation XXBookView

+ (instancetype)bookView {
    
    return [self bookViewWithBook:nil];
    
}

+ (instancetype)bookViewWithBook:(XXBook *)book {
    
    //这里用同名xib的好处就体现了,用NSStringFromClass方法获得的类名也就是xib文件名,不用手动输,避免写错
    XXBookView *bookView = [[[NSBundle mainBundle]loadNibNamed:NSStringFromClass(self) owner:nil options:nil] firstObject];
    
    bookView.book = book;
    return bookView;
    
}


@end

6、模型属性的setter方法中将数据设置到子控件上去。

//
//  XXBookView.m
//  CustomViewWithXib
//
//  Created by Daniel on 16/3/3.
//  Copyright © 2016年 Daniel. All rights reserved.
//

#import "XXBookView.h"
#import "XXBook.h"

/** 类扩展中增加子控件属性,关联xib中的子控件 */
@interface XXBookView()

@property (weak, nonatomic) IBOutlet UIImageView *bookImage;

@property (weak, nonatomic) IBOutlet UILabel *authorLable;

@property (weak, nonatomic) IBOutlet UILabel *priceLable;

@end

@implementation XXBookView

+ (instancetype)bookView {
    
    return [self bookViewWithBook:nil];
    
}

+ (instancetype)bookViewWithBook:(XXBook *)book {
    
    //这里用同名xib的好处就体现了,用NSStringFromClass方法获得的类名也就是xib文件名,不用手动输,避免写错
    XXBookView *bookView = [[[NSBundle mainBundle]loadNibNamed:NSStringFromClass(self) owner:nil options:nil] firstObject];
    
    bookView.book = book;
    return bookView;
    
}

//setter方法:将数据设置到子控件上去
- (void)setBook:(XXBook *)book {
    
    _book = book;
    
    //设置子控件的数据
    self.bookImage.image = [UIImage imageNamed:book.bookImage];
    self.authorLable.text = book.bookAuthor;
    self.priceLable.text = book.bookPrice;
    
}


@end

当然,数据在模型的自定义构造方法中加载就行了,在ViewController中添加这个自定义view就行了

[self.view addSubview:[XXBookView bookView]];

运行的效果图:

我没有在模型中加载数据,所以看到view只有我手动改的背景色和文字。


© 著作权归作者所有

共有 人打赏支持
shenhuniurou
粉丝 19
博文 78
码字总数 63826
作品 0
广州
Android工程师
【iOS10】iOS10新特性

1 Swift 3.0 优化了许多API,简化了接口,去掉了不必要的单词等,比如下面这几个例子: a b c d 2 SiriKit 通过官方文档我们可以看到SiriKit框架支持的六类服务分别是: 语音和视频通话 发送...

魔笛GNR
2016/09/13
0
0
iOS使用xcode可视化图像编辑功能进行图片拉伸

iOS中可视化拉伸图片技巧 一、补充 在我的另一篇博客http://my.oschina.net/u/2340880/blog/403996中探讨了IOS拉伸图像(UIImage)的几种方法和一些小经验,这篇是一个补充,再将xcode中的另一...

珲少
2015/04/21
0
0
iOS传感器集锦、飞机大战、开发调试工具、强制更新、Swift仿QQ空间头部等源码

iOS精选源码 飞机大作战(http://www.code4app.com/thread-31130-1-1.html) MUPhotoPreview -简单易用的图片浏览器(http://www.code4app.com/thread-31133-1-1.html) LLDebugTool是一款针对开......

sunnyaigd
10/10
0
0
旧工程适配iOS 6和iPhone 5的一些故事

2012-09-29 By dapps  旧工程适配iOS 6和iPhone 5的一些故事抢沙发 分类:iPhone开发 标签:iOS 6、iPhone 5、Retina、适配iOS 6、适配iPhone 5 国内最专业的APP开发者社区,dApps! 苹果每...

Orange1
2012/10/30
0
0
TeeChart .NET for iOS图表开发入门教程

去年,TeeChart 为iOS图表开发专门发布了TeeChart NET for iOS(包含在TeeChart Mobile中,TeeChart8.5折进行中),相信很多人都对其感兴趣。慧都为大家制作了TeeChart NET for iOS的入门教程...

裸奔的火腿肠
2014/02/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

day123-20181021-英语流利阅读-待学习

这款新字体,比记忆面包还管用 Lala 2018-10-21 1.今日导读 字体能跟学习效果有什么关系?你还别说,来自澳洲的心理学家和设计师们,还真创造了一款号称能够帮助大家记忆信息、增强学习效果的...

飞鱼说编程
39分钟前
1
0
CMD命令行:查看 Windows 操作系统的安装时间

电脑越用越卡,计划以后每两个月重新安装一次系统。 那,怎么查看自己系统的安装日期? 问题抛出来了,其实很简单的。 cmd 中输入 systeminfo 命令,回车,等一会 …… 出来结果后,查找下面...

LivingInFHL
今天
3
0
复习

10月19日任务 打印某行到某行之间的内容 sed转换大小写 sed在某一行最后添加一个数字 删除某行到最后一行 打印1到100行含某个字符串的行 一.打印某行到某行之间的内容 #sed -n '/\[abcfd\]/...

hhpuppy
今天
3
0
精通Spring Boot——第十一篇:使用自定义配置

今天这篇文章给大家介绍自定义配置的两种方式 第一式: 使用@ConfigurationProperties,且看代码 package com.developlee.customconfig.config;import org.springframework.boot.context.p...

developlee的潇洒人生
今天
3
0
python:pycharm启动出现异常:io.netty.channel.ChannelException.....

尝试用管理员权限启动终端, 输入: netsh winsock reset 重启电脑. 360的优化搞出来的幺蛾子........

Oh_really
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部