2013-06-21 35 views
0

我在XCode上創建了一個包含設置條件按鈕(即「播放到30」,「播放到20」等)的菜單的遊戲。我想讓這些按鈕創建一個與我的遊戲相同的ViewController,唯一的區別是遊戲結束前必須達到多少點。對於每個設置而言,相同的ViewController的倍數效率太低。有沒有解決的辦法?使用不同的按鈕來訪問相同的ViewController

+0

如果您繼續使用新的視圖控制器,則會創建一個實例 - 如果您返回,則會取消分配此視圖控制器。 – JDS

回答

0

在您的遊戲視圖控制器爲使創建自定義的初始化:

// add in GameViewController.m 
@implementation GameViewController 
-(id)initWithLimit:(int)limit { 
    self = [super initWithNibName:@"NibName" bundle:nil]; 
    if (self) { 
     _limit = limit; 
    } 
    return self; 
} 

// add in GameViewController.h 
@interface GameViewController : UIViewController 
@property (nonatomic) int limit; 
@end 

執行菜單的按鈕動作像這樣:

-(IBAction)play30 { 
    GameViewController *game = [[GameViewController alloc] initWithLimit:30]; 

    // Handle game view here. 
} 

這個答案假定您創建GameViewController時的新實例用戶點擊按鈕。 如果你不希望每個按鈕錄音,那麼你可以創建你的菜單視圖控制器GameViewController屬性,並使用延遲實例爲遊戲視圖控制器的時間來實例化一個新的ViewControllerSubclass:

- (GameViewController *)game { 
     if (!_game) _game = ...; 
     return _game; 
} 

-(IBAction)play20 { 
    // Assuming game is a property. 
    self.game.limit = 20; 

    // Perform setup that expects the limit property to be set. 
    [self.game setup]; 

    // Handle game view here. 
} 

希望這有助於:)

+0

有沒有辦法做到這一點沒有nib文件?當我創建我的項目時,我決定取消選擇該選項。 @Benjamin – user2480376

+0

是的,只需將自定義初始化程序添加到遊戲視圖控制器中,但使用self = [super init];相反,其餘的是相同的,如果你想我可以發佈另一個解釋更深入的答案。 –

+0

我想我明白了。謝謝! – user2480376

相關問題