文档章节

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

shenhuniurou
 shenhuniurou
发布于 2016/03/03 22:42
字数 841
阅读 21
收藏 0
点赞 1
评论 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
粉丝 20
博文 78
码字总数 63826
作品 0
广州
Android工程师
iOS一些代码的取巧写法总结(二)

一、在xib/storyboard里面设置view圆角半径 在xib/storyboard里面设置view圆角半径 神奇的IB_DESIGNABLE和IBInspectable(xib中设置圆角) 二、push pop 动画突然消失的解决方案 产生的原因是动...

朝雨晚风 ⋅ 2016/12/05 ⋅ 0

压倒程序员的最后一个面试题,iOS性能优化的面试题

这是我前面几天碰到的面试题: 如何对定位和分析项目中影响性能的地方?以及如何进行性能优化? 我的答案: 定位方法: instruments   在iOS上进行性能分析的时候,首先考虑借助instrumen...

iOS首席鉴黄师 ⋅ 04/09 ⋅ 0

目前有成熟的App代码翻译技术吗?

大家好: 本人多年技术老鸟,现有抛出一个思考。针对目前市面上的移动互联网项目(主要指客户端)类型,无非以下几种主要类型: 原生App: iOS/Android H5响应式 H5套壳(PhoneGap/微信小程序/国...

瑾少 ⋅ 04/14 ⋅ 0

iOS自定义弹出视图、收音机APP、图片涂鸦、加载刷新、文件缓存等源码

iOS精选源码 一款优秀的 聆听夜空FM 源码(http://www.code4app.com/thread-14546-1-1.html) zhPopupController 简单快捷弹出自定义视图(http://www.code4app.com/thread-14861-1-1.html) WHS......

sunnyaigd ⋅ 06/04 ⋅ 0

iOS小白点效果、打地鼠游戏、轮播效果、画板、富文本编辑器等源码

iOS精选源码 美团外卖商家点菜页面(http://www.code4app.com/thread-29383-1-1.html) 板书录制演示程序(http://www.code4app.com/thread-29384-1-1.html) 分类轮播、直播间礼物列表轮播 -- O...

sunnyaigd ⋅ 04/24 ⋅ 0

【AR】开始使用Vuforia开发iOS(2)

原 设置iOS开发环境 安装Vuforia iOS SDK 如何安装Vuforia iOS示例 编译并运行Vuforia iOS示例 支持iOS金属 iOS 64位迁移 设置iOS开发环境 适用于iOS的Vuforia引擎目前支持运行iOS 9及更高版...

lichong951 ⋅ 06/11 ⋅ 0

如何判断你是合格的高级iOS开发工程师?

前言 随着移动互联网的高速发展泄洪而来,有意学习移动开发的人越来越多了,竞争也是越来越大,需要学习的东西很多。如何才能在激烈的移动开发者竞争中一枝独秀,成为一名真正合格的高级iOS...

_小迷糊 ⋅ 05/26 ⋅ 0

iOS原生混合RN开发最佳实践

做过原生iOS开发或者Android开发的同学们肯定也都了解Hybrid,有一些Hybrid的开发经验,目前我们企业开发中运用最广泛的Hybrid App技术就是原生与H5 hybrid,在早期的时候,可能部分同学也接...

光强 ⋅ 05/16 ⋅ 0

转:一套代码iOS、Android两端运行,Google Flutter意味着什么?

原文:https://www.toutiao.com/a6569388465538990600/?ttfrom=weixin&utmcampaign=clientshare×tamp=1529580533&app=newsarticle&utmsource=weixin&iid=35476649324&utmmedium=toutiao......

鸿蒙无上至尊 ⋅ 06/22 ⋅ 0

iOS逆向工程- 学习整理(工具详解)

前言 一、逆向工程的要求 具备丰富的 iOS 开发经验 最好能非常熟悉 iOS 设备的硬件构成,iOS 系统的运行原理。 拿到任意一个 App 之后能够大致推断出它的项目规模和使用的技术,比如它的MVC模...

_小迷糊 ⋅ 05/11 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

istio 文档

https://istio.io/docs/concepts/ https://istio.io/docs/concepts/traffic-management/handling-failures/ https://istio.io/docs/concepts/traffic-management/rules-configuration/......

xiaomin0322 ⋅ 20分钟前 ⋅ 0

编程语言的作用及与操作系统和硬件的关系

一、编程语言的作用及与操作系统和硬件的关系 作用:编程语言是计算机语言,是一种程序员与计算机之间沟通的介质,通过编程语言可以使得计算机能够根据人的指令一步一步去工作,完成某种特定...

slagga ⋅ 30分钟前 ⋅ 0

runtime实现按钮点击事件

也不能说是实现吧,,,就是有点类似于RAC里边的写法,不用给btn添加另外的点击事件,就那个add...select...这样子很不友好,来看下代码: [self.btn handleControlEvent:UIControlEventTou...

RainOrz ⋅ 30分钟前 ⋅ 0

Windows系统运维转linux系统运维的经历

开篇之前,首先介绍一下我的背景把:我是一个三线城市的甲方运维。最近,在《Linux就该这么学》书籍的影响下和朋友小A(Linux运维已经三年了,工资也比我的高很多)的影响下,决定转行。最近...

linux-tao ⋅ 31分钟前 ⋅ 0

zip压缩工具,tar打包工具

zip压缩工具 zip打包工具跟前面说到的gzip,bz2,xz 工具最大的不一样是zip可以压缩目录。如果没有安装,需要使用yum install -y zip 来安装。安装完之后就可以直接使用了,跟之前提到的压缩...

李超小牛子 ⋅ 39分钟前 ⋅ 0

使用npm发布自己的npm组件包

一、注册npm账号 官网:https://www.npmjs.com/signup 注册之后需要进行邮箱验证,否则后面进行组件包发布时候会提示403错误,让进行邮箱核准。 二、本地新建一个文件夹,cd进入后使用npm i...

灰白发 ⋅ 41分钟前 ⋅ 0

010. 深入JVM学习—垃圾收集策略概览

1. 新生代可用GC策略 1. 串行GC(Serial Copying) 算法:复制(Copying)清理算法; 操作步骤: 扫描年轻代中所有存活的对象; 使用Minor GC进行垃圾回收,同时将存活对象保存到“S0”或“S...

影狼 ⋅ 41分钟前 ⋅ 0

JVM性能调优实践——JVM篇

在遇到实际性能问题时,除了关注系统性能指标。还要结合应用程序的系统的日志、堆栈信息、GClog、threaddump等数据进行问题分析和定位。关于性能指标分析可以参考前一篇JVM性能调优实践——性...

Java小铺 ⋅ 42分钟前 ⋅ 0

误关了gitlab sign-in 功能的恢复记录

本想关sign-up的,误点了sign-in 退出后登录界面提示: No authentication methods configured 一脸懵逼.. 百度后众多方案说修改application_settings 的 signin_enabled字段; 实际上新版本字段...

铂金蛋蛋 ⋅ 43分钟前 ⋅ 0

登录后,后续请求接口没有带登录cookie可能原因

1.XMLHttpRequest.withCredentials没设置好,参考https://developer.mozilla.org/zh-CN/docs/Web/API/XMLHttpRequest/withCredentials...

LM_Mike ⋅ 44分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部