2014-01-20 72 views
0

我有一個共同的麻煩,但無法找到一個正確的方法來解決它,我會從頭開始。iOS:如何從自定義單例類更改當前UIViewController

我正在製作遊戲中心和配對遊戲應用程序。我想接收和處理來自朋友的邀請。我做了處理所有Game Center內容的單身人士課程。現在,我對如何處理邀請(我的意思是在整個應用程序中)懷疑。

我的單身人士確實處理了它,並且我制定了額外的協議,在收到邀請時調用委託方法。所以,我決定在我所有的UIViewControllers中實現這個協議(我不知道如何以更好的方式做到這一點,如果你知道我會非常感謝你分享你的經驗)。但是現在,我陷入了一個題目中的問題。我需要將我的UIViewController從當前視圖控制器更改爲「遊戲視圖控制器」(它必須顯示爲遊戲)。我使用導航視圖控制器爲我的應用程序。 那麼,有沒有辦法將當前視圖控制器從我的「Game Center stuff」單例類或至少從當前ViewController更改爲特定的視圖控制器?

例如,我在選項視圖控制器,這是來自主菜單視圖控制器(MainMenuVC→OptionsVC),我收到邀請,我接受它。現在我想去「遊戲視圖控制器或GameVC」,這是另一個賽格路徑(MainMenuVC→Game ModesVC→GameVC)的地方。

我希望我的問題很清楚,如果不是的話,我會提供圖片解釋,請在下面的評論中告訴我。我認爲這個問題很微不足道,有一些常見的做法。謝謝。

回答

0

不知道我是否完全理解了這個問題,但看看UINavigationController:setViewControllers:並查看它是否可能是你之後的東西。 它將允許您將一堆視圖控制器交換爲另一個堆棧。要創建新的堆棧,您可以使用[self.storyboard instantiateViewControllerWithIdentifier:@「whatever」]

0

也許您的需要是通知。

將它添加到OptionVC,您接受邀請後,發送此消息:

[[NSNotificationCenter defaultCenter] postNotificationName:@"AcceptInvitationNofity" object:self]; 

,並添加到您的MainMenuVC:

[[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(receiveEvent:) 
               name:@"AcceptInvitationNofity" 
               object:nil]; 
在receiveEvent功能

,導航到GameVC。

0

我想你有兩個問題,我讀過。如我錯了請糾正我。

1日的問題,你問是否有更好的方法來處理單與背景的東西,如邀請等是涉及

所以現在,你必須在每一個控制器與代表團進行了單。我們不知道這些代表是幹什麼的,他們對您的控制員有多特別。由於它在所有控制器中,我懷疑所有控制器在調用委託後都必須做大部分相同的事情?在這種情況下,您應該有一個BaseController來實現委託方法,並讓所有後續控制器成爲該BaseController的子類。任何專門的邏輯都可以在子類中重寫,並且可以調用[super delegateMethod]。


第二個問題是你問你是否可以從同一個UINavigationController中的一個segue流轉到另一個segue流。那個很簡單。您需要給故事板上的控制器一個標識符,使用標識符實例化這些控制器,將它們全部放入數組中,然後將navigationcontroller的Controller數組設置爲該新數組。這裏有一些代碼來說明這一點。

-(void)someButtonPressed { 
    NSMutableArray *viewControllers = [self.navigationController viewControllers].mutableCopy; 
    [viewController removeLastObject]; 
    [viewController addObject:[self.storyboard instantiateViewControllerWithIdentifier:@"GameModes"]]; 
    [viewController addObject:[self.storyboard instantiateViewControllerWithIdentifier:@"GameVC"]]; 
    [self.navigationController setViewControllers:viewControllers]; 
} 

這將彈出您當前的視圖控制器,並讓您登陸GameVC控制器,同時保留GameModes控制器。

+0

你是對的,我的單身人士處理所有遊戲中心的事情,如身份驗證,發送和接受邀請,配對。我想將我當前的ViewController(不管它是什麼)更改爲我的遊戲視圖控制器(玩家接受邀請)。所以,你是對的,我會盡力實施你的決定。 –

0

後收到邀請後,您可以從當前的UIViewController稱之爲:

UIViewController *controller = [self.storyboard instantiateViewControllerWithIdentifier:@"GameVCIdentifier"]; 
[self.navigationController pushViewController:controller animated:YES]; 

其中「GameVCIdentifier」是你要展示的UIViewController的標識符。您可以在Storyboard中設置標識符。

相關問題