iOS-xib的使用1
一、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的更多相关文章
- ios xib或storyBoard的那些小方法
今天看了一下xib里的一些小技巧,但是百度一搜的话,网上已经有人写过教程了,在这里我也就懒一下,不写那么详细了,就写一些如何百度的方法! 1."通过KVC修改占位文字的颜色" [t ...
- iOS xib View宽高不能改变
IOS - xib(Interface Builder,view) - can't change view size(view不能改变大小问题) 今天在试着swift语言写个demo,,当中遇到了这个 ...
- **IOS:xib文件解析(xib和storyboard的比较,一个轻量级一个重量级)
使用Xcode做iOS项目,经常会和Xib文件打交道,因为Xib文件直观的展现出运行时视图的外观,所以上手非常容易,使用也很方便,但对于从未用纯代码写过视图的童鞋,多数对Xib的理解有些片面. Xib ...
- IOS xib和代码自定义UIView
https://www.jianshu.com/p/1bcc29653085 总结的比较好 iOS开发中,我们常常将一块View封装起来,以便于统一管理内部的子控件. 下面就来说说自定义View的封装 ...
- iOS - xib中关于拖拽手势的潜在错误
iOS开发拓展篇—xib中关于拖拽手势的潜在错误 一.错误说明 自定义一个用来封装工具条的类 搭建xib,并添加一个拖拽的手势. 主控制器的代码:加载工具条 封装工具条以及手势拖拽的监听事件 此时运行 ...
- iOS | XIB简单应用和注意点
2018开篇第一篇文章,本文分享一点关于XIB的小知识,对于iOS开发新人来说或许有用. XIB 是 Interface Builder 的图形界面设计文档. 从Xcode 3.0 开始,苹果提供Xi ...
- iOS - XIB之AutoLayout添加约束
XIB--AutoLayout添加约束 仿QQ登录界面: 说明:以下各图背景红色只是方便看清楚: 1.创建工程:创建xib文件 2.打开xib文件: (1).创建头像: 拖控件:uiimageview ...
- ios xib 中的 size class
需要阅读UITraitCollection的说明文档,先截图如下: 今天说说xib中的size class的简单设置,先看图 一共有9个小块,水平方向代表width,垂直方向代表height. 对于w ...
- IOS, xib和storyboard的混用
1. 从xib的viewcontroll中启动storyboard 或者 从一个storyboard切换到另一个storyboard: [objc]– (IBAction)openStoryboard ...
- IOS xib在tableview上的简单应用(通过xib自定义cell)
UITableView是一种常用的UI控件,在实际开发中,由于原生api的局限,自定义UITableViewCell十分重要,自定义cell可以通过代码,也可以通过xib. 这篇随笔介绍的是通过xib ...
随机推荐
- 【起航计划 015】2015 起航计划 Android APIDemo的魔鬼步伐 14 App->Activity->Translucent Blur 模糊背景
这个例子和Translucent不同的一点是Blur,也就是显示在当前Activit背后的其它Activity以模糊方式显示. 这是通过window对象Flag来设置的. // Have the sy ...
- 如何让MVC和多层架构和谐并存(一)
MVC的架构和多层架构,在ORM框架上是不兼容的.MVC的数据库操作需要通过实体框架Entity Framework,多层的数据库操作需要通过DAL层.我们最近刚完成的项目,实现了MVC和多层的并存, ...
- [topcoder]SRM 647 DIV 2
第一题,送分题. 第二题, #include <vector> #include <algorithm> #include <map> #include <q ...
- 初看Mybatis 源码 (一)
Mybatis 的使用,首先需要构建一个SqlSessionFactory 实例.而该实例可以通过SqlSessionFactoryBuilder来创建. String resource = &quo ...
- php网站修改默认访问文件的nginx配置
搭建好lnmp后,有时候并不需要直接访问index.php,配置其他的默认访问文件比如index.html这时候需要配置一下nginx才能访问到你想要设置的文件 直接上代码,如下是我的配置的一份简单的 ...
- COGS 449. 网络病毒
★★ 输入文件:virus.in 输出文件:virus.out 简单对比时间限制:1 s 内存限制:128 MB [题目描述] 公元2008年10月31日星期五,笃志者所在的整个机房由 ...
- Android(java)学习笔记62:android.intent.action.MAIN 与 android.intent.category.LAUNCHER 理解
1. 先看看网路上的说法: android.intent.action.MAIN 决定应用程序最先启动的 Activity android.intent.category.LAUNCHER 决定应用程 ...
- Android开发之动态创建多个按钮
//获取屏幕大小,以合理设定 按钮 大小及位置 DisplayMetrics dm = new DisplayMetrics(); getWindowManager().getDefaultDispl ...
- CPP-STL:用vector保存对象时保存指针的优点, 以及reserve的使用(转)
代码1 #include <vector> #include <stdio.h> class A { public: A() { printf("A()/n" ...
- splay版
指针是个好东西 不过就是得判空 还有别忘传引用(其实应该都传引用) #include<cstdio> #include<algorithm> #include<iostr ...