如何为多个nib文件iphone配备一个视图控制器

时间:2011-08-24 09:19:50

标签: iphone objective-c cocoa-touch

所以我整个上午都试图弄清楚如何从一个视图控制器加载方向改变的第二个nib文件,但我没有成功,这就是为什么我来这里寻求帮助。问题是我想在旋转设备时加载横向nib文件。到目前为止我有这个代码它不起作用:

-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
    if (toInterfaceOrientation==UIInterfaceOrientationLandscapeRight || toInterfaceOrientation==UIInterfaceOrientationLandscapeLeft) {
        [self initWithNibName:@"myNibFile" bundle:nil];
    }
}

未加载新笔尖。在界面构建器中,我将文件所有者设置为此视图控制器,以便它可以工作。我也尝试过:[[NSBundle mainBundle] loadNibNamed:@"myNibFile" owner:self options:nil]; 但我也没有运气你能提供一个关于如何从initWithNibName加载一个nib文件或一个有用的链接的例子吗?我似乎没有在网上找到它。

非常感谢。

2 个答案:

答案 0 :(得分:0)

为此,您已经创建了类的新实例。您无法在运行时更改视图控制器的nib。

为什么要为一个视图控制器创建多个nib文件。只需在单个nib文件和用户中创建多个视图。

答案 1 :(得分:0)

在运行时更改控制器的笔尖根本不是一个好主意(不确定它是否可能合法)。它可能会导致笔记本处于悬浮状态。最终的内存泄漏。一段时间后我遇到了同样的问题&发现不使用IB&笔尖是最简单的方法(幸运的是我的观点并不复杂)。解决方案是在代码和代码中布局子组件。根据方向变化调整它们。我在UIViewController子类中执行了以下操作 -

-(void) adjustLayout:(UIInterfaceOrientation)orientation
{
    if(UIInterfaceOrientationIsPortrait(orientation))
    {
         mySubview1.frame = frameInAccordanceWithPortrait;
    }
    else
    {
        mySubview1.frame = frameInAccordanceWithPortrait;
     }
}

- (void) willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
    [super willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];
    [self adjustLayout:toInterfaceOrientation];
} 

HTH,

阿克沙伊