2014-07-19 44 views
0

我是ios開發的新手。我有以下3個Vc的情況。請在這裏找到屏幕截圖:scenario VC1連接到LoginVC。在點擊VC1中的一個按鈕後,我登錄到LoginVC並在成功登錄時返回到VC1,否則會顯示一個警告框。 LoginVC上還有一個「取消」選項。如果用戶決定不登錄,他可以點擊取消按鈕。ios7:從LoginViewController轉換到其他ViewControllers

在VC2中有一個按鈕,點擊它我最終會去VC3。然而,在我可以去VC3之前,我想看看用戶是否已經登錄。 如果用戶已經登錄,那麼我去VC3 別的,我想登錄到LoginVC,併成功登錄我想去VC3。在打「取消」時,我想返回到VC2。一旦進入VC3,點擊「後退」按鈕後,我必須回到VC2。

我的問題是: *取消情景*: 我可以從VC1或VC2登錄到VC。我如何區分源碼VC,當我在LoginVC? 基於我的源VC,我可能必須去VC1(源:VC1)或VC2(源:VC2)。我怎樣才能做到這一點? 成功登錄: 如果源代碼爲VC1,則成功登錄後我會去VC1 如果源代碼爲VC2,則在成功登錄後,我會在單擊後退按鈕後轉到VC3並最終轉到VC2。 我該怎麼做?

我一直在使用模式 - 塞格斯VC的和LoginVC下面的代碼之間進行轉換之間源VC的區別嘗試:

if ([self.presentingViewController isMemberOfClass:[VC1 class]]) 

但這din't工作。我們如何處理這種情況?幫助將不勝感激。謝謝:)

+0

嘗試「isKindOfClass」而不是「isMemberOfClass」或查看我的答案。 – AJ9

回答

0

我通常在這樣的情況下做一個公共財產,這意味着我的來源(我的意思是我來自的控制器)。

所以在LoginVC.h接口聲明添加,

// I assumed LoginVC subclasses UIViewController 
@interface LoginVC : UIViewController 

    @property (strong, nonatomic) NSString *sourceController; 

@end 

然後在VC1實現prepareForSegue方法

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if([segue.identifier [email protected]"<TheSegueIdentifierYouSetInStoryboard>"]){ 
      UIViewController *loginVC = [segue destinationController]; 
      loginVC.sourceController = @"VC1"; 
    } 
} 

現在登錄VC你總是可以說

if([sourceController [email protected]"VC1"]){ 
    // do your thing 
} 
else{ 
    // do your other thing 
} 

感覺免費要求我進一步解釋,如果你需要

+0

ThankYou,我理解這個方法,現在我會試試這個方法:)我現在有另一個問題與dismissviewcontroller有關。我把它作爲另一個問題發佈,還是我可以在這裏編輯我的問題? – Rhiya

+0

把它在一個不同的問題:) – AJ9

+0

嘿User3002572,@Pillbox,請你看看我發佈的第二個問題:http://stackoverflow.com/questions/24845118/dismissviewcontrolers-when-multiple-viewcontrollers-segues -存在。非常感謝您的幫助:)非常感謝您的回覆 – Rhiya

0

您的解決方案應該可以工作。但是這裏有一個替代方案,它也可以工作:

當你使用導航控制器時,你可以檢查以前的控制器。它們被UINavigationController堆疊起來。

要做到這一點得到了以前viewControllers的數組像這樣:

NSArray * previousControllers = self.navigationController.viewControllers; 

然後遍歷它們,看看類中的最後視圖控制器的類型。

UIViewController * last = previousControllers[previousControllers.count -1]; 

if([last isKindOfClass:[VC1 class]]){ 
//Got it 
} 
+0

感謝您的回覆@Phillbox,因爲我使用的是模態段,而不是爲VC2和VC3推送段。我很懷疑,如果我能得到一堆previousViewControllers。 – Rhiya

+0

任何你在模擬賽段中使用push segues的理由? – AJ9

+0

只要數據與「子」視圖(LoginVC)有關,「父」視圖並不真正相關,所以我使用的是模態輪 – Rhiya