2013-08-19 107 views

回答

19

您可以使用UINavigationControllerDelegate協議,然後定義:

– navigationController:didShowViewController:animated: 
+0

沒有我期望的那麼糟糕。 'self.navigationController = self;'並添加該方法。我將控制器保存到基於Segue ID的局部變量中,然後將這些值與傳遞的ViewController進行比較。 –

+7

這將適用於原始視圖控制器具有導航控制器的推送段,但在模態段的情況下該怎麼辦? – Drux

+1

我使用了來自Levi的Segue自定義的答案,並且在這裏實現了我的'perform'像這樣的例子:http://stackoverflow.com/a/23778394/586489這很好用,我知道什麼時候push完成並且可以使用segues。 –

14

如果你不想使用viewDidAppear:方法,你可以創建一個自定義的segue。在perform方法中,您將爲動畫使用動畫,並且可以有一個完成塊。您可以在動畫完成後將代碼添加到那裏。

+0

所以在Storyboard中使用標準的拖放式繼承是不可能的? – hakonbogen

+2

這是你如何創建它,但你必須繼承'UIStoryboardSegue'並在其中實現'perform'方法。之後,在'storyboard'中,您將segue的課程設置爲您剛剛創建的課程。 – Levi

-9

您可以使用 - (空)prepareForSegue:(UIStoryboardSegue *)賽格瑞發件人:(ID)發送

權之前在源UIViewController中執行賽格瑞此方法將被調用。如果您想在目標UIViewController中執行一些代碼,您可以獲得segue的目標視圖控制器。

您也可以將此代碼添加到desintation viewController中的viewdidAppear中。

-9

您可以在prepareForSegue方法中調用目標方法UIViewController。

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    NSLog(@"prepareForSegue: %@", segue.identifier); 

    if ([segue.identifier isEqualToString:@"Happy"]) { 
     [segue.destinationViewController setHappiness:100]; 
    } else if ([segue.identifier isEqualToString:@"Sad"]) { 
     [segue.destinationViewController setHappiness:0]; 
    } 
} 

這裏setHappiness方法是目的地控制器,這裏有100個傳遞。所以你可以寫在目標控制器的方法,在這裏稱之爲

+3

這並不能真正指出什麼時候實際的賽季完成,但這發生在賽季開始時 – Sam

7

在斯威夫特,從UIViewController子類,你可以得到UINavigationController實例,並設置代表,以便了解有關賽段的完成情況,如圖所示。跟蹤賽段的另一個合理位置可能是AppDelegate

從一個視圖控制器這樣做的

實施例(VC的簡稱):

class MyViewControllerSubclass : UIViewController, UINavigationControllerDelegate { 

    func viewDidLoad() { 
     self.navigationController.delegate = self 
    } 

    func navigationController(navigationController: UINavigationController, didShowViewController viewController: UIViewController, animated: Bool) { 
     println("Did show VC: \(viewController)") 
    } 
} 

但是,這僅顯示了當SEGUE到VC完成後, 如VC將viewWillAppear()viewDidAppear()委託方法被呈現;然而,他們並不知道何時目標VC是聯合國-介紹。

在您要跟蹤的VC中,可以添加以下內容來檢測VC(及其內存)何時解除分配,或覆蓋viewWillDisappear()方法。

deinit { 
    println(__FUNCTION__, "\(self)") 
} 
相關問題