2011-03-15 68 views
1

我有UINavigation Controller,它有一个UIViewController压入堆栈并显示。使用外部UITableViewDelegate并通过UIViewController回调到UINavigation控制器

该UIViewController有一个UITableView并使用该UITableView的数据源和委托的外部类。我这样做是因为我需要动态地交换那个数据源。一切都非常适合显示数据。

但是,当在代理 中处理“down”didSelectRowAtIndexPath时,我正在努力调用所有返回到UINavigationController的方法。而我已经习惯了,能够做到这样的事情时的UIViewController和委托是相同的对象:

ExampleViewController *newViewController = [[ExampleViewController alloc] init]; 
[self.navigationController pushViewController:newViewController animated:YES]; 
[newViewController release]; 

我不能从委托这样做,我只是没有得到什么正确的引用回UINavigationController应该是pushViewController。

我是否需要设置一个类似于委托的ID,以便UITableViewDelegate有一个指针直接返回到UINavigationController?

回答

3

只有通过导航堆栈推送的UIViewController实例才能通过“navigationController”属性方便地访问相应的UINavigationController实例。所以你有几个选择:

1)将一个对导航控制器的引用传递给你的表视图委托,以便他们可以调用你以前使用的“push”方法。

2)将视图控制器的引用传递给表视图委托,并在用户点击表视图行时让它们调用方法。您可以编写自己的委托协议,并在视图控制器中实施它,以正式实现此方法。

+0

我很感激反馈意见。我使用了方法1,只是在我将其指定为数据源和委托时设置了保留的UINavigationController属性。为此推出一个协议似乎有些过分,但也许我只是懒惰,因为那肯定会不太紧密。 – Nick 2011-03-15 01:30:13

+0

听起来不错。如果需要的话,您可以随时重构您的代码 - 同时,您的代码将修剪并更易于维护。 – 2011-03-16 19:18:55

相关问题