2011-08-26 105 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的實例來管理你的視圖,而不是直接在應用程序委託中管理它們。