一、File‘s owner的解析过程和使用:

1.

  storyboard:描述软件界面;iOS5.0后出来的。

  xib:描述软件界面;是storyboard前身。

2.

  项目环境里面的所有资源都要通过 [NSBundle mainBundle]来访问, 比如访问图片的全路径;

  ====有一个方法:loadNibNamed:(NSString*) owner:(id) option:(NSDictionary*) ===

3. 如果xib中的某一个控件想和控制器进行连线的话:

  1> xib的file‘s owner必须要设置class为相应的控制器;

  2> loadNibNamed:(NSString*) owner:(id) option:(NSDictionary*)中的owner要设置成相应的控制器(因为这个参数不传的话,运行的时候file‘s owner还是为空);

  3> xib设置file‘s owner的class,到时候xib里面的控件才可以在file’s owner(类或对象,比如Dog对象)中能找到相应的方法去调用。

4. xib的本质就是xml,解析示意过程如下:

------------------------------------------------------------------------------------------------------------------------------------

5. File‘s owner使用步骤:

     注:  类型匹配就是说: 在File‘s owner的class中设置的类型要和loadNibNamed:(NSString*) owner option:(NSDictionary*)中的owner参数的类型要一致。

二、view的封装 (自定义view)

前言:不应该用控制器来监听xib中按钮的点击,因为xib和控制器绑定死了,耦合性太强,不利于扩展重用。

--------------------------------------------------------------------------------------------------------------------------------------------------------------

为方便查看,简单描述一下通过xib自定义view的概况:

=======RowView.m 和 RowView.h 文件内容 以及xib文件======

#import "RowView.h"
@implementation RowView
+ (id)rowViewWithIcon:(NSString *)icon name:(NSString *)name
{
    RowView *view = [[NSBundle mainBundle] loadNibNamed:@"RowView" owner:nil options:nil][0];

#if 1 // 通过tag来拿出xib中的控件

// 1.设置图标
    UIButton *iconBtn = (UIButton *)[view viewWithTag:1];
    [view.iconBtn setImage:[UIImage imageNamed:icon] forState:UIControlStateNormal];  // 注:类方法不能访问成员变量!所以不能用 _iconBtn
    
    // 2.设置姓名
    UILabel *nameLabel = (UILabel *)[view viewWithTag:2];
    view.nameLabel.text = name;

#else   // 拖线连接属性和xib
    // 1.设置图标
    //  UIButton *iconBtn = (UIButton *)[view viewWithTag:1];
    [view.iconBtn setImage:[UIImage imageNamed:icon] forState:UIControlStateNormal];
    
    // 2.设置姓名
    //  UILabel *nameLabel = (UILabel *)[view viewWithTag:2];
    view.nameLabel.text = name;
#endif

return view;
}
@end

----------------------------------------

#import <UIKit/UIKit.h>
@interface RowView : UIView
+ (id)rowViewWithIcon:(NSString *)icon name:(NSString *)name;
@property (nonatomic, weak) IBOutlet UIButton *iconBtn;      // 不是拖线的话就不要了
@property (nonatomic, weak) IBOutlet UILabel *nameLabel;   // 不是拖线的话就不要了
@end

----------------------------------------

RowView.xib:

             

控制器中的用法:
- (void)viewDidLoad
{
      [super viewDidLoad];
  
      RowView *row = [RowView rowViewWithIcon:@"017.png" name:@“jake"];
      [self.view addSubview:row];
}

iOS-xib的使用1的更多相关文章

  1. ios xib或storyBoard的那些小方法

    今天看了一下xib里的一些小技巧,但是百度一搜的话,网上已经有人写过教程了,在这里我也就懒一下,不写那么详细了,就写一些如何百度的方法! 1."通过KVC修改占位文字的颜色" [t ...

  2. iOS xib View宽高不能改变

    IOS - xib(Interface Builder,view) - can't change view size(view不能改变大小问题) 今天在试着swift语言写个demo,,当中遇到了这个 ...

  3. **IOS:xib文件解析(xib和storyboard的比较,一个轻量级一个重量级)

    使用Xcode做iOS项目,经常会和Xib文件打交道,因为Xib文件直观的展现出运行时视图的外观,所以上手非常容易,使用也很方便,但对于从未用纯代码写过视图的童鞋,多数对Xib的理解有些片面. Xib ...

  4. IOS xib和代码自定义UIView

    https://www.jianshu.com/p/1bcc29653085 总结的比较好 iOS开发中,我们常常将一块View封装起来,以便于统一管理内部的子控件. 下面就来说说自定义View的封装 ...

  5. iOS - xib中关于拖拽手势的潜在错误

    iOS开发拓展篇—xib中关于拖拽手势的潜在错误 一.错误说明 自定义一个用来封装工具条的类 搭建xib,并添加一个拖拽的手势. 主控制器的代码:加载工具条 封装工具条以及手势拖拽的监听事件 此时运行 ...

  6. iOS | XIB简单应用和注意点

    2018开篇第一篇文章,本文分享一点关于XIB的小知识,对于iOS开发新人来说或许有用. XIB 是 Interface Builder 的图形界面设计文档. 从Xcode 3.0 开始,苹果提供Xi ...

  7. iOS - XIB之AutoLayout添加约束

    XIB--AutoLayout添加约束 仿QQ登录界面: 说明:以下各图背景红色只是方便看清楚: 1.创建工程:创建xib文件 2.打开xib文件: (1).创建头像: 拖控件:uiimageview ...

  8. ios xib 中的 size class

    需要阅读UITraitCollection的说明文档,先截图如下: 今天说说xib中的size class的简单设置,先看图 一共有9个小块,水平方向代表width,垂直方向代表height. 对于w ...

  9. IOS, xib和storyboard的混用

    1. 从xib的viewcontroll中启动storyboard 或者 从一个storyboard切换到另一个storyboard: [objc]– (IBAction)openStoryboard ...

  10. IOS xib在tableview上的简单应用(通过xib自定义cell)

    UITableView是一种常用的UI控件,在实际开发中,由于原生api的局限,自定义UITableViewCell十分重要,自定义cell可以通过代码,也可以通过xib. 这篇随笔介绍的是通过xib ...

随机推荐

  1. Spring课程 Spring入门篇 1-1Spring入门课程简介

    课程链接: 课程简介: 1 什么是框架 2 Spring简介 3 IOC(配置,注解) 4 Bean(配置,注解) 5 AOP(配置,注解,AspectJ.API) SpringFrameWork 常 ...

  2. spring boot Configuration Annotation Proessor not found in classpath

    出现spring boot Configuration Annotation Proessor not found in classpath的提示是在用了@ConfigurationPropertie ...

  3. HTML标签_1

    <meta charset="utf-8" /> 设置字符集 <meta name="description" content="这 ...

  4. 只为更快、更省、更安全的 Azure CDN

    来来来!小编今天要公布一件大事啦: 经过最近一次更新,Azure CDN 高级版服务 HTTPS SSL 证书的申请方式有所改进啦,除了现有的 Azure CDN 代为申请证书外,还支持用户自己申请的 ...

  5. Python用户交互与流程控制

    1. 用户交互 python3通过input实现用户交互,与python2的raw_input一样,接收的值都转换成字符串格式.python2中也有一个input,而python2中的input接收的 ...

  6. 是否应该提供一个dao.insertIgnoreNull ? (像updateIgnoreNull一样)

     是否应该提供一个dao.insertIgnoreNull ? (像updateIgnoreNull一样)  发布于 406天前  作者 SayingCode  153 次浏览  复制  上一个帖子  ...

  7. 2017.11.21 基于JSP+Servlet+JavaBean实现复数运算(二)

    代码的实现 最基本的MVC模式 //input.jsp 输入界面 <%@ page language="java" import="java.util.*" ...

  8. 如何不安装SQLite让程序可以正常使用

    System.Data.SQLite.dll和System.Data.SQLite.Linq.dll不必在GAC里面,关键在于Machine.config的DBProviderFactories没有正 ...

  9. linux .h .so .a文件

    在linux开发中,完全不使用第三方库的情况比较少见,通常都需要借助一个或多个函数库的支持才能完成相应功能.从程序员角度看,函数库实际上是一些头文件(.h)和库文件(.so或.a)的集合.linux下 ...

  10. css隐藏元素

    在CSS中,让元素隐藏(指屏幕范围内肉眼不可见)的方法很多,有的占据空间,有的不占据空间:有的可以响应点击,有的不能响应点击.下面一个个列出,选一个适合你的 { display: none; /* 不 ...