Xib的问题,很棘手(解决办法)

开发项目中遇到的,而且在网上找了一圈,没有人有类似的提问,麻烦啊!

简单说,创建一个带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有关联。(这可能也是我上面的问题的原因)


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值