开发项目中遇到的,而且在网上找了一圈,没有人有类似的提问,麻烦啊!
简单说,创建一个带xib的ViewController,例如:CustomViewController,基本要显示这个view的基本方法就不多说了:
CustomViewController* customViewController = [[CustomViewController alloc] initWithNibName:nil bundle:nil];
如果initWithNibName:nil,后是nil,缺省你在CustomViewController.m里什么都不做,那显示的也是CustomViewController.xib。好了,问题来了,当你新建一个xib,例如:New.XIB,装载的时候用这个xib,在使用它时,(在调用的地方初始化)用:
UIViewController* detailViewController = [[SetupPassViewController alloc] initWithNibName:nil bundle:nil];
然后在CustomViewController.m的viewDidLoad(),如果不加其他代码,则显示的是CustomViewController.xib,如果要显示New.xib则要添加:
UIView *tmpCustomView;
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { //判断是否iPad
//获得nib视图数组
NSArray *nib = [[NSBundle mainBundle]loadNibNamed:@"New" owner:self options:nil];//新的xib的名字
//得到第一个UIView
tmpCustomView= [nib objectAtIndex:0];
//获得屏幕的Frame
CGRect tmpFrame = [[UIScreen mainScreen] bounds];
//设置自定义视图的中点为屏幕的中点
[tmpCustomView setCenter:CGPointMake(tmpFrame.size.width / 2, tmpFrame.size.height / 2)];
//添加视图
[self.view addSubview:tmpCustomView];
}
但当你调整View的背景颜色(缺省是White Color)为浅色,就会发现CustomViewController.xib也会在背景上,我尝试着把这个xib删掉,但神奇的事情来了,只要你的类名是原来这个CustomViewController,原来的xib始终都在上面,阴魂不散的!
why!why!why!
折腾了很长时间没有解决,智商捉急啊!
看了仁兄的评论,其实原因我也知道,就是在我声称ViewController的时候我选择了带xib建的,那么这个xib就一直和这个类绑定了。所以在我的工程里,我为了即适应iPhone的又能在iPad上显示,所以正确的做法是应该先建立不带xib的类,然后再自建两个xib(分别针对iPad和iPhone的),但我的工程里已经完成了六个xib及类的建设,为了避免重建,我将原来的xib删除,然后重新命名新的类(多加了一个n),再将两个xib在代码里关联(通过先判断iPad还是iPhone)
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
}
注意:当在view加载时报错,一种容易被忽略的情况是查看File’s Owner右键里的Outlets下的View是否和xib有关联。(这可能也是我上面的问题的原因)