
创建一个View1.xib, 随便设一个背景色,加一个标识UILabel, 这样好知道是这个view是哪一个view. 你可以在这个view上加作意的subview,我只是说明原理,所以这儿并没有加作何subview. 最终我的View1
由于View1会放到其它View上作为subview,所以这儿size是Freeform, Status Bar是:None。
将下面代码放到viewDidLoad中:
//1
NSArray *views = [[NSBundle mainBundle] loadNibNamed:@"View1" owner:nil options:nil]//&1
UIView *v = [views lastObject]
CGRect r = v.frame
r.origin.y += 80
v.frame = r
[self.view addSubview:v]
&1这行代码就是加载View1.xib, 然后将xib中的UIView实保存到views中, 由于xib中我们只拖入了一个view, 所以这儿lastObject就返回这个view的实例,这样便加载了xib中的UIView. 接着将这个UIView addSubview到其它view上,运行效果如图:
2. 通过Owner建立变量关联
首先我们为ViewController创建一个IBOutlet属性:
@property (nonatomic, weak) IBOutlet UIView *referencedView
接着同上面介绍的一样创建一个View2.xib,
File’s Owner中,我们设为ViewController, 这样我们就可以与实例变量_referencedView建立关联了,如图:
接着在viewDidLoad中,在刚才加入的代码下面添加如下代码:
// 2
[[NSBundle mainBundle] loadNibNamed:@"View2" owner:self options:nil]
r = _referencedView.frame
r.origin.y = v.frame.size.height + v.frame.origin.y
_referencedView.frame = r
[self.view addSubview:_referencedView]
与//1中的代码有点类似,只不过owner属性为self了。这样一来,loadNibNamed后,就会实例化与之关联的变量_referencedView, 运行程序你将会看到效果:
3.Class Owner建立变量关联
其实这个原理与上面2说的一样的,只不过这儿我们特别定义一个class来作为xib的Owner, 要所有需要关系的view都可以声明在这个Owner中,这样方便代码管理与维护。
这里我们声明一个NSObject的子类FileOwner, 然后再在FileOnwer中声明IBOutLet的关联变量:
@property (nonatomic, weak) IBOutlet UIView *view
同理创建一个View3.xib, File’s Owner设为FileOwner, 并建立view关联:
接着在viewDidLoad结尾处添加以下代码:
// 3
FileOwner *owner = [FileOwner new]
[[NSBundle mainBundle] loadNibNamed:@"View3" owner:owner options:nil]
r = owner.view.frame
r.origin.y = _referencedView.frame.origin.y + _referencedView.frame.size.height
owner.view.frame = r
[self.view addSubview:owner.view]
运行效果:
4. 引入UIView Category
为了代码简单,我们增加一个UIView Category方法:
+(id)loadFromNibNamed:(NSString*) nibName {
return [FileOwner viewFromNibNamed:nibName]
}
其中FileOwner的class 方法:
+(id)viewFromNibNamed:(NSString*) nibName {
FileOwner *owner = [self new]
[[NSBundle mainBundle] loadNibNamed:nibName owner:owner options:nil]
return owner.view
}
这样加载xib的代码就会变得更简单。
同理,我们创建一个View4.xib, File’s Owner设为FileOwner, 并建立view关联:
接着在viewDidLoad尾添加代码:
// 4
UIView *v4 = [UIView loadFromNibNamed:@"View4"]
r = v4.frame
r.origin.y = owner.view.frame.origin.y + owner.view.frame.size.height
v4.frame = r
[self.view addSubview:v4]
在Xcode 3.x中,将xib从iPhone版转变为iPad版,通过Create iPad Version菜单。但在Xcode 4.x中,这个菜单找不到了。通过一番摸索,笔者发现可以用如下方法将xib转换为iPad版本。1、修改xib源文件xib文件其实是一个xml文件,你可以以文本方式编辑和修改它。在Project Navigator中,在xib文件上右键,选择“Open As ->Source Code”,即可以源代码方式查看xib文件,找到"com.apple.InterfaceBuilder3.CocoaTouch.XIB"一行,将其改为 "com.apple.InterfaceBuilder3.CocoaTouch.iPad.XIB",即在".XIB"前插入一个".iPad"。按下??+F,打开搜索栏,点击Replace菜单,将模式改变替换模式。将xib文件中所有"IBCocoaTouchFramework"用 "IBIPadFramework"替换。按下??+S,保存修改。2、修改xib的视图尺寸在xib文件上右键,选择“Open As ->Interface Builder – iOS”,用IB模式打开。选择xib文件中的根视图(UIView),在属性面板中找到Size选项,将其改为Full iPad Screen.现在,你可以有一个iPad版本的xib了。欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)