从推送视图访问第一个导航控制器中的方法和变量

Posted

技术标签:

【中文标题】从推送视图访问第一个导航控制器中的方法和变量【英文标题】:access methods and variables in first navigation controller from pushed view 【发布时间】:2010-10-10 09:59:16 【问题描述】:

我通常使用 UIViews 来制作我的应用程序 - 但我使用的是导航控制器。我将视图推到顶部,我想将项目添加到数组中。但是,我无法访问主要的导航控制器方法等。这是设置

1) AppDelegate 添加导航控制器

[window addSubview:navigationController.view];

2) 在 RootViewController 我推送一个新的 UIView

AddNewViewController *addNewViewController = [[AddNewViewController alloc] init];
[self presentModalViewController: addNewViewController animated:YES];

3) 然后我想从 AddNewViewController 访问主 RootViewController - 但似乎无法访问任何内容。所有方法等都像我之前所做的那样声明(使用 UIViews)。此代码在 RootViewController 中找不到任何内容。

AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
[appDelegate.navigationController myFunction];

我在 RootViewController.h 文件中有 myFunction。我以前用过这种方法,但从来没有用过导航控制器。我想这与 hte 堆栈有关 - 但我无法找出我做错了什么!

非常感谢您的帮助!

* 更新 *

我现在用过

AddNewViewController *addNewViewController = [[AddNewViewController alloc] init];
[self.navigationController pushViewController:addNewViewController animated:YES];

推送视图控制器。在我的代码中,我试图访问 tableview 以使用以下代码重新加载它

[self.navigationController.mainTableView reloadData];   

但 mainTableView 不可访问。我已经声明并同步了它,但仍然看不到它。我还尝试循环并使用堆栈的元素[0](如下所示),但也没有得到任何结果!

NSArray *controllers = [[NSArray alloc] initWithObjects:self.navigationController.viewControllers, nil];

UIViewController *tmpController = [[UIViewController alloc] init];
tmpController = [controllers objectAtIndex:0];

【问题讨论】:

你想通过哪种方法访问self.navigationController?如果您在视图被推送到堆栈之前尝试访问它 self.navigationController 为 nil。 【参考方案1】:

首先,

[self presentModalViewController: addNewViewController animated:YES];

做一些不同于

的事情
[self.navigationController pushViewController:addNewViewController animated:YES];

这些方法的名称应该说明一切。


并且 appDelegate.navigationController 不是 你的 rootViewController。它是 UINavigationController。您可以使用 self.navigationController.viewControllers 获取附加到导航控制器的 NSArray 视图控制器。索引 0 处的项目应该是您的 rootViewController。

如果您将 viewController 推送到 navigationControllers 堆栈,则无需使用 appdelegate。您可以使用 self.navigationController 访问 navigationController。

【讨论】:

啊,这是有道理的——也感谢 pushviewcontroller 代码。我把它改成了那个,感觉好多了。我已经用新代码更新了我上面的帖子。

以上是关于从推送视图访问第一个导航控制器中的方法和变量的主要内容,如果未能解决你的问题,请参考以下文章

模态下的弹出/推送视图

导航控制器推送零视图控制器错误

如何在没有任何推送序列的情况下快速从另一个视图控制器访问方法?

导航推送视图控制器不起作用

如何正确地动画推送带有透明导航栏和工具栏的视图控制器?

推送视图控制器中的半透明导航栏覆盖?