通过xib自定义控件,2)必威新建一个xib文件(

必威 1随机配图

由此xib自定义控件

  • 新建三个承继UIView的类
+(instancetype)photoViewWithPhoto:(Photo *)photo
{
    SYLView *sylView = [[[NSBundle mainBundle] loadNibNamed:NSStringFromClass(self) owner:nil options:nil] lastObject];

    sylView.photo = photo;

    return sylView;
}
  • 新建贰个xib文件(xib的文件名最佳跟控件类名一样)
    • 加多子控件、设置子控件属性
    • 修改最外侧这些控件的class为控件类名
    • 将子控件进行连线
  • 提供模型属性,重写模型的set方法
    • 在set方法中给子控件设置数据
//重写set方法
- (void)setPhoto:(Photo *)photo
{
    _photo = photo;

    _photoShow.image = [UIImage imageNamed:photo.photoName];
    _pledge.text = photo.pledge;
}

2.Xib的加载格局

方式一:通过mainBundel loadNibNamed:加载

NSArray *views = [[NSBundle mainBundle] loadNibNamed:@"xib文件名" owner:nil options:nil]

方式二:通过UINib  nibWithNibName加载

UINib *nib = [UINib nibWithNibName:@"xib文件名" bundle:nil];

NSArray *views = [nib instantiateWithOwner:nil options:nil];

2.xib自定义cell

  • 1.开立贰个继续自UITableViewCell的子类,比方XYDealCell
  • 2.创办三个xib文件(文件名提出跟cell的类名同样),举个例子XYDealCell.xib
    • 拖拽一个UITableViewCell出来
    • 修改cell的class为XYDealCell
    • 安装cell的录取标记
    • 往cell中加多须要利用的子控件
  • 3.在调控器中
    • 动用registerNib...方法注册xib文件
    • 应用重用标志找到cell(若无注册xib文件,就供给手动去加载xib文件)
    • 给cell传递模型数据
  • 4.在XYDealCell中
    • 将xib中的子控件连线到类增加中
    • 必要提供二个模型属性,重写模型的set方法,在这些点子中设置模型数据到子控件上
    • 也足以将开创获得cell的代码封装起来(举例cellWithTableView:方法)

给封装View设置数据的两种艺术

  • 直接将属性暴漏在.h文件中:不好,影响封装性,不应该将团结的子控件暴漏在头文件中

  • 提供多少个初叶化方法

  • 据书上说tag设置子控件数据

    • 因为子控件相当少,所以设置相比便于。
    • 调整器做的的太多了
  • 提供三个装置模型的点子,将模型传递过去(直接传送叁个模子对象给View本身设置值)

  • 提供二个属性,直接采纳点语法赋值

不同点

  • xib 是轻量级的,用来描述局地的 UI 分界面
  • storyboard 是重量级的,用来描述整个软件的七个分界面
  • 再者 storyboard 能显得四个分界面之间的跳转关系

4.initWithcoder、awakeFromNib与layoutSubviews

1)initWithcoder

1.1 只即便从storyboard/xib中加载就可以调用那几个办法;

1.2 这么些主意一般是起始化的操作;

1.3 在init方法内只管理调整件内部的成立,但不管frame的开端化,因为外面调用的init方法不自然立时给frame赋值,所以率先次init是frame的值或者为nil;

2)awakeFromNib

storyboard/xib中加载实现的时候调用,想做一些在xib加载落成的操作,就在那么些法子中操作(建议在那个办法中写早先化代码)

3)layoutSubviews

重写系统的-(void)layoutSubviews方法,这一个格局措施特意用来布局子控件,一般在此地设置子控件的frame,当控件本身的尺寸发生改换的时候,系统会自行调用这么些办法。重写此格局内绝对要调用[super layoutSubviews]

1. tableview重返行高的点子

/**
 *  精确返回每行cell的高度,此方法会真实计算对应高度值,并会一次性算出所有行高
 */
 - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return 100;
}

/**
 *  估测返回每行cell的高度,添加此方法可以修改调用顺序,不进行一次性精确计算,先返回cell,在根据每行的展示计算对应真实高度,用到哪个算哪个,提高性能
 */
  - (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(nonnull NSIndexPath *)indexPath
{
    return 200;
}

一旦直白调用总计行高方法

 - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;

程序的调用顺序是

  1. 调用heightForRowAtIndexPath回到全体行高
  2. 调用cellForRowAtIndexPath重临对应行

设若先调用估摸中度方法

 - (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(nonnull NSIndexPath *)indexPath;

前后相继的调用顺序是

  1. 调用estimatedHeightForRowAtIndexPath归来全数行高
  2. 调用cellForRowAtIndexPath回去对应行
  3. 调用heightForRowAtIndexPath回到对应的真正行高

就此利用猜度行高的方法可提升功能。

【注意】
由此iOS 11适配的测验发掘:

 iOS 11 中tableViewCell的高度计算顺序发生变化

 iOS 11 中数据源方法的调用顺序(无论有没有估算高度都是直接先执行cellForRow)
     estimatedHeightForRow --> cellForRow -- > heightForRow 或
     cellForRow -- > heightForRow

 iOS 10 以下有没有估算高度是不同的
     estimatedHeightForRow --> cellForRow -- > heightForRow
     heightForRow -- > cellForRow

2.xib自定义cell

  • 1.创办叁个持续自UITableViewCell的子类,举个例子XYDealCell
  • 2.创设三个xib文件(文件名提议跟cell的类名相同),比如XYDealCell.xib
    • 拖拽一个UITableViewCell出来
    • 修改cell的class为XYDealCell
    • 安装cell的录用标志
    • 往cell中加多供给动用的子控件
  • 3.在调整器中
    • 运用registerNib...方法注册xib文件
    • 接纳重用标记找到cell(若无注册xib文件,就须要手动去加载xib文件)
    • 给cell传递模型数据
  • 4.在XYDealCell中
    • 将xib中的子控件连线到类扩大中
    • 急需提供贰个模子属性,重写模型的set方法,在那些法子中安装模型数据到子控件上
    • 也能够将开创取得cell的代码封装起来(举例cellWithTableView:方法)

 

iOS开采中,相当多时候系统提供的控件并无法很好的知足大家的急需,由此,自定义控件便成为搭建UI分界面中须要的一部分。本篇博文以笔记的样式,计算了自定义控件的二种艺术以及逐个形式的落到实处步骤,虽简略却不简单,因此期望留下读者越来越多的思辨空间。作为入门的编制程序学习者,独立思想本事和初始工编织程能力都以根本的。在此,希望大家学习欢悦,共同提升。

共同点

  • 都用来描述软件分界面
  • 都用Interface Builder 工具来编排
  • 实质都以转变到代码去创立控件

1.xib与storyBoard区别

Xib是轻量级的,用来说述局地的UI分界面

Storyboard是重量级的,用来说述整个软件的多个分界面,况且能显得八个分界面之间的跳转关系

下面对这两类cell的创设格局大约记录各步骤。

小结

  • 花色中cell类型常见有二种:等高cell 和 非等高cell
  • 等高cell自定义,由于并不是关注中度计算难点、推荐使用Xib、StoryBoard。
  • 非等高cell自定义,推荐应用Xib。

本文由必威发布于必威-编程,转载请注明出处:通过xib自定义控件,2)必威新建一个xib文件(

TAG标签:
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。