2010-08-03 55 views
0

我從一本書follwing教程,有委託和數據源從控制器(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坐在應用程序委託。但是,如何最好地從委託類訪問navcontroller?

回答

2

你可以做這樣的事情

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

但是,你應該問自己,爲什麼你要做到這一點,如果有一個更好的方式,是更符合MVC(模型視圖控制器)保持和規則的封裝。

例如,UIViewController提供了一個名爲navigationController的屬性,如文檔所述,該屬性將返回給定視圖控制器的相應導航控制器。

+0

是的,如果您的委託類與您的視圖控制器不同,並且需要訪問導航控制器,則更好的方法是在初始化委託對象時設置屬性。 – 2010-08-03 14:14:55

+0

感謝您的快速回復! 我想要做到這一點的唯一原因是讓它通過教程的方式工作... – 2010-08-03 15:44:51