Iphone 当方向更改时,以编程方式更改nib

Iphone 当方向更改时,以编程方式更改nib,iphone,ios,cocoa-touch,uiview,nib,Iphone,Ios,Cocoa Touch,Uiview,Nib,我在init中像这样加载笔尖: self = [super initWithNibName:@"PageView_iPhone" bundle:nil]; 但是,如果方向发生变化,我如何在运行时(即在初始化之后)更改此设置initWithNibName不起作用。在初始化期间,我设置视图(以编程方式创建),并为视图控制器中的每个视图的中心位置或帧创建额外的CGPoint或CGRect 在init中创建视图后,我调用名为layoutViewsForOrientation的方法来设置初始位置,并传入

我在init中像这样加载笔尖:

self = [super initWithNibName:@"PageView_iPhone" bundle:nil];

但是,如果方向发生变化,我如何在运行时(即在初始化之后)更改此设置
initWithNibName
不起作用。

在初始化期间,我设置视图(以编程方式创建),并为视图控制器中的每个视图的中心位置或帧创建额外的CGPoint或CGRect

在init中创建视图后,我调用名为layoutViewsForOrientation的方法来设置初始位置,并传入当前状态栏方向。当方向改变时,我使用以下代码:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    BOOL result = NO;
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
        result = (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
    } else {
        result = YES;
    }
    if( result == YES ) [self layoutViewsForOrientation:interfaceOrientation];
    return result;
}

可能有一种更简单的方法,但这很适合我的需要。

在初始化期间,我设置视图(以编程方式创建),并为视图控制器中的每个视图的中心位置或帧创建额外的CGPoint或CGRect

在init中创建视图后,我调用名为layoutViewsForOrientation的方法来设置初始位置,并传入当前状态栏方向。当方向改变时,我使用以下代码:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    BOOL result = NO;
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
        result = (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
    } else {
        result = YES;
    }
    if( result == YES ) [self layoutViewsForOrientation:interfaceOrientation];
    return result;
}

可能有一种更简单的方法,但这很适合我的需要。

如果您确实想加载不同的笔尖,可以使用:

[[NSBundle mainBundle] loadNibNamed:@"PageView_iPhone" owner:self options:nil];
NSArray* nibViews = [[NSBundle mainBundle] loadNibNamed:@"PageView_iPhone"
                                              owner:self
                                            options:nil];

PageView_iPhone* myView = [nibViews objectAtIndex:0];

如果您确实想加载不同的nib,可以使用:

[[NSBundle mainBundle] loadNibNamed:@"PageView_iPhone" owner:self options:nil];
NSArray* nibViews = [[NSBundle mainBundle] loadNibNamed:@"PageView_iPhone"
                                              owner:self
                                            options:nil];

PageView_iPhone* myView = [nibViews objectAtIndex:0];

谢谢你能解释一下最后一行吗?我不太确定。nib PageView_iPhone会成为一个类而myView会成为一个子类吗?非常感谢。。。是的,我需要加载一个不同的笔尖。很遗憾,自动调整大小无法工作。您应该在
PageView\u iPhone
类之外使用此代码。通常,在保存该视图的视图控制器中,您可以从旧视图切换到新视图。视图控制器初始化后,您不能加载nib,是吗?我的印象是,一旦nib在init中加载,它就无法加载另一个nib来替换当前的。@frowing感谢您的解释。但我该怎么处理我的视图呢?然后我是否需要将myView指定给viewController的视图?比如self.view=myView?原来我错了,看看这个帖子:谢谢!你能解释一下最后一行吗?我不太确定。nib PageView_iPhone会成为一个类而myView会成为一个子类吗?非常感谢。。。是的,我需要加载一个不同的笔尖。很遗憾,自动调整大小无法工作。您应该在
PageView\u iPhone
类之外使用此代码。通常,在保存该视图的视图控制器中,您可以从旧视图切换到新视图。视图控制器初始化后,您不能加载nib,是吗?我的印象是,一旦nib在init中加载,它就无法加载另一个nib来替换当前的。@frowing感谢您的解释。但我该怎么处理我的视图呢?然后我是否需要将myView指定给viewController的视图?比如self.view=myView?原来我错了,看看这篇帖子: