2014-07-23 20 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:方法内发生,但这并不重要。每当导航控制器即将显示下一个视图控制器时,它会向其代理发送消息