可可 - 需要帮助切换xibs

时间:2011-08-26 07:18:01

标签: iphone

我真的很感激我在哪里出错了。基本上我有一个我在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];  
    }

} 
}

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

1 个答案:

答案 0 :(得分:0)

首先,您应该知道只需使用正确的格式命名xib即可消除代码中的冗余。 iOS具有某些资源(XIB,图像等)的命名约定,允许操作系统为不同的设备加载适当的资源。来自iOS Resource Programming Guide ...

  

iOS支持特定于设备的资源

     

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

     

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

     

<basename><device>.<filename_extension>

     

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

     

~ipad - 资源只能加载到iPad设备上。

     

~iphone - 资源只能加载到iPhone或iPod touch设备上。

因此,您无需进行所有手动检查。至于切换的实际行为,了解更多关于您的应用/视图结构将有助于回答问题,但您可能应该使用UIViewController实例来管理您的视图,而不是直接在应用代理中管理它们。