2011-08-26 57 views
0

我真的很感激在我要去的地方错了任何帮助。基本上我有一个游戏应用程序,我在XCode4(通用) - 我有几个子视图屏幕(.h .m .xib),我需要切换,并在某些情况下重新加载。这里是我正在做它的主AppDelegate.m:可可 - 在切换xibs需要帮助

-(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]; 
    } 

} 
} 

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

+0

标签不是唯一的。它对你有帮助吗? –

回答

0

首先,你应该知道,你可以通过简单地用正确的格式命名您的xibs消除你的代码中的一些冗余。 iOS对资源(XIB,图像等)有一定的命名约定,允许操作系统为不同的设备加载适当的资源。从iOS Resource Programming Guide ...

IOS支持设备特有的资源

在iOS系统4.0和更高版本,就可以标记各个资源文件 只能在特定类型的设备的使用。此功能 简化了您必须为通用应用程序编写的代码。 而不是创建单独的代码路径来加载iPhone的 资源文件的一个版本以及iPad的另一版本文件 ,您可以让包加载例程选择正确的文件。所有 您必须做的是适当地命名您的资源文件。

要关联与特定设备的资源文件,你 定制修改字符串添加到其文件名。此修改 串列入产生的文件名格式如下:

<basename><device>.<filename_extension>

...的<device>字符串是区分大小写的字符串,可以是下列值 之一:

〜 ipad - 资源只能在iPad设备上加载。

〜iphone - 资源应该在iPhone或只有iPod touch设备加载。

所以你不需要做所有的手动检查你的行为。至于切换的实际行为,更多地了解你的应用程序/视图结构将有助于回答这个问题,但你应该使用UIViewController的实例来管理你的视图,而不是直接在应用程序委托中管理它们。