Iphone Cocoa-切换XIB需要帮助吗

Iphone Cocoa-切换XIB需要帮助吗,iphone,Iphone,我真的很感激任何关于我哪里出错的帮助。基本上,我有一个在XCode4(通用)中开发的游戏应用程序——我有几个子视图屏幕(.h.m.xib),我需要在它们之间切换,有时需要重新加载。下面是我在主AppDelegate.m中的操作方式: -(void)switchxibs_nextScreen1 { //close any views first [self closesuperviews]; if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdi

我真的很感激任何关于我哪里出错的帮助。基本上,我有一个在XCode4(通用)中开发的游戏应用程序——我有几个子视图屏幕(.h.m.xib),我需要在它们之间切换,有时需要重新加载。下面是我在主AppDelegate.m中的操作方式:

-(void)switchxibs_nextScreen1 {

//close any views first
[self closesuperviews];

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
{    
    nextGame *theView = [[nextGame alloc] init]; 
    theView.view.tag=101;
    [_window addSubview:theView.view];  
}
else
{  
    nextGame_iPhone *theView = [[nextGame_iPhone alloc] init]; 
    theView.view.tag=101;
    [_window addSubview:theView.view]; 
} 
}

-(void) switchxibs_nextScreen2 {
//close any views first
[self closesuperviews];

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
{    
    nextGame *theView = [[nextGame2 alloc] init]; 
    theView.view.tag=101;
    [_window addSubview:theView.view];  
}
else
{  
    nextGame_iPhone *theView = [[nextGame2_iPhone alloc] init]; 
    theView.view.tag=101;
    [_window addSubview:theView.view]; 
} 
}
-(void)closesuperviews{ 
for (UIView *subview in _window.subviews) { 
    // Only remove the subviews with tag equal to 101
    if(subview.tag==101){
        [subview removeFromSuperview];  
    }

} 
}

我不确定这是否是我应该做的事情。我遇到的问题是,当切换屏幕并返回到一个屏幕时,它似乎没有正确关闭。任何帮助都将不胜感激。

首先,您应该知道,只需使用正确的格式命名XIB,就可以消除代码中的一些冗余。iOS对资源(XIB、图像等)有特定的命名约定,允许OS为不同的设备加载适当的资源。从

iOS支持特定于设备的资源

在iOS 4.0及更高版本中,可以标记单个资源文件 仅在特定类型的设备上可用。这种能力 简化了为通用应用程序编写的代码。 而不是创建单独的代码路径来加载一个版本的 iPhone的资源文件和iPad的不同版本的文件, 您可以让包加载例程选择正确的文件。全部的 您必须做的是适当地命名资源文件

要将资源文件与特定设备关联,请添加 自定义修改器字符串到其文件名。包含此修饰符 字符串生成具有以下格式的文件名:

…字符串是区分大小写的字符串,可以是 以下值:

~ipad-资源应仅加载到ipad设备上

~iphone-资源只能加载到iphone或ipodtouch设备上


所以你不需要做所有的手工检查。至于切换的实际操作,了解更多关于应用程序/视图结构的信息有助于回答问题,但您可能应该使用UIViewController实例来管理视图,而不是直接在应用程序委托中管理视图。

标记不是唯一的。这对你有帮助吗?