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

时间:2010-10-10 09:59:17

标签: iphone uiviewcontroller uinavigationcontroller uiapplicationdelegate

我通常使用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];

1 个答案:

答案 0 :(得分:0)

首先,

[self presentModalViewController: addNewViewController animated:YES];

做了与

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

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


appDelegate.navigationController不是你的 rootViewController。它是UINavigationController。您可以使用self.navigationController.viewControllers获取附加到navigationcontroller的viewControllers的NSArray。索引0处的项应该是您的rootViewController。

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