如何在一个视图控制器中拥有多个nib文件iphone版

问题描述 投票:2回答:2

我花了一上午的时间想弄清楚如何在方向改变时从一个视图控制器加载第二个nib文件,但我没有成功,这就是为什么我来到这里寻求帮助。事情是这样的,我想在设备旋转时加载一个横向的nib文件。我有这样的代码,到目前为止,它不工作。

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

新的nib没有被加载。在接口构建器中,我将文件所有者设置为这个视图控制器,所以它应该工作。我也试过用: [[NSBundle mainBundle] loadNibNamed:@"myNibFile" owner:self options:nil]; 但我也没有成功 你能不能提供一个如何从initWithNibName加载nib文件的例子或者一个有用的链接?我似乎在网上找不到。

非常感谢。

iphone objective-c cocoa-touch
2个回答
0
投票

你必须创建新的类的实例,你不能在运行时改变视图控制器的nib。

为什么你要为一个视图控制器创建多个nib文件。只要在单个nib文件中创建多个视图,并相应地创建用户。


0
投票

在运行时改变一个控制器的nib不是一个好主意(不知道是否可能)。法律上). 会导致笔尖在内存中悬空&最终导致内存泄漏。前段时间我也遇到了同样的问题&发现不使用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];
} 
© www.soinside.com 2019 - 2024. All rights reserved.