2014-07-23 159 views
0

如何委託實際調用的方法?如何調用委託方法

像可以說,我加入到我的UIViewController.m:

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated 
{ 
    // code 
} 

是否視圖控制器出現時該方法被調用?代表團如何工作?

回答

2

根據文檔,在導航控制器顯示viewController’s視圖和navigationItem屬性之前調用代理。

但是,看起來你的問題是,「如何?」。

在您的Storyboard或代碼中的某處,設置了UINavigationController。無論哪裏,它都有一個委託屬性(一個變量)。該屬性設置爲實現UINavigationControllerDelegate協議的某個對象。

例如:

MySpecialViewController *myViewController = [[MySpecialViewController alloc] init]; 
UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:myViewController]; 
navigationController.delegate = self; 

現在,每當navigationController即將呈現視圖控制器,所述navigationController:willShowViewController:animated:委託方法將在對象上被調用。

+0

因此,如果我有像上面那樣的sspecified的navigationController並設置像這樣:self.window.rootViewController = navigationController;然後做所有我的視圖控制器有導航控制器作爲父母使用? – cdub

+0

類別。我建議你閱讀Apple的UINavigationController文檔。這是很有說服力的。基本上,您可以調用[navigationController pushViewController:myController animated:YES]將其添加到堆棧,[navigationController popViewControllerAnimated:YES]刪除一個。這會使熟悉的iPhone滑動到後退按鈕的正確動畫。 – Troy

1

那麼它大概就像這裏面UINavigationController類:

- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated 
{ 
    [self.delegate navigationController:self willShowViewController:viewController animated:animated]; 

    //do stuff to actually push the view controller 
} 

如果委託是零什麼也不會發生,因爲消息比零使沒有影響,但如果你設置方法被調用的委託。我不確定它是否直接在pushViewController:方法內發生,但這並不重要。每當導航控制器即將顯示下一個視圖控制器時,它會向其代理髮送消息