从单独的委托类访问导航控制器

时间:2010-08-03 13:45:45

标签: iphone cocoa-touch uikit uinavigationcontroller

我正在阅读一本书中的教程,其中委托和数据源与控制器分开(MyViewController.m)

[self setDataSource:[[MyViewDataSource alloc]
[self setDelegate:[[MyViewDelegate alloc]

为了理解,我现在想从委托类(MyViewDelegate.m)中弹出一个控制器

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
        2ndViewController *controller = [[2ndViewController alloc]];
        [[self navController] pushViewController:controller animated:YES];

当然,由于navcontroller位于app委托中,因此无法使用。但是,如何从委托类中最好地访问navcontroller?

1 个答案:

答案 0 :(得分:2)

您可以执行类似

的操作
UINavigationController *navController = [(MyAppDelegate*)[[UIApplication sharedApplication] delegate] navigationController];

但是,您应该问问自己为什么需要这样做,如果有更好的方法更符合MVC(模型视图控制器)和封装规则。

例如,UIViewController提供了一个名为navigationController的属性,如文档所述,该属性将返回给定视图控制器的相应导航控制器。