Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 从子视图导航控制器访问顶部导航控制器_Iphone_Uinavigationcontroller_Subview_Navigationcontroller - Fatal编程技术网

Iphone 从子视图导航控制器访问顶部导航控制器

Iphone 从子视图导航控制器访问顶部导航控制器,iphone,uinavigationcontroller,subview,navigationcontroller,Iphone,Uinavigationcontroller,Subview,Navigationcontroller,我的视图和控制器都是这样设置的 选项卡/栏控制器 在1。是根视图控制器 2分钟内。是以编程方式创建的导航控制器,在根视图控制器中显示为子视图 我要做的是访问顶部选项卡栏/导航控制器,以便将视图推到上面 我尝试了parentViewController,但它所做的只是将视图推到编程的导航控制器上 有什么建议吗 以下是我如何设置我的根视图控制器: -(void)viewDidAppear:(BOOL)animated{ NSLog(@"ROOT APPEARED"); [supe

我的视图和控制器都是这样设置的

  • 选项卡/栏控制器
  • 在1。是根视图控制器
  • 2分钟内。是以编程方式创建的导航控制器,在根视图控制器中显示为子视图
  • 我要做的是访问顶部选项卡栏/导航控制器,以便将视图推到上面

    我尝试了parentViewController,但它所做的只是将视图推到编程的导航控制器上

    有什么建议吗

    以下是我如何设置我的根视图控制器:

      -(void)viewDidAppear:(BOOL)animated{
        NSLog(@"ROOT APPEARED");
        [super viewDidAppear:animated];
    
        WorklistViewController *worklistController = [[WorklistViewController alloc]initWithNibName:@"WorklistView" bundle:[NSBundle mainBundle]];
        UINavigationController *worklistNavController = [[UINavigationController alloc] initWithRootViewController:worklistController];
        worklistNavController.navigationBar.barStyle = UIBarStyleBlackOpaque;
        worklistNavController.view.frame = watchlistView.frame;
        [worklistNavController.topViewController  viewDidLoad];
        [worklistNavController.topViewController  viewWillAppear:YES];
        [self.view addSubview:worklistNavController.view];
    
        GetAlertRequestViewController *alertsController = [[GetAlertRequestViewController alloc]initWithNibName:@"AlertsView" bundle:[NSBundle mainBundle]];
        UINavigationController *alertsNavController = [[UINavigationController alloc] initWithRootViewController:alertsController];
        alertsNavController.navigationBar.barStyle = UIBarStyleBlackOpaque;
        alertsNavController.view.frame = alertsView.frame;
        [alertsNavController.topViewController  viewDidLoad];
        [alertsNavController.topViewController  viewWillAppear:YES];
        [self.view addSubview:alertsNavController.view];
    }
    

    查看UIViewController的navigationController和tabBarController属性。这些将返回给定UIViewController“所属”的相应navigationController或tabBarController

    因此,您可以执行以下操作:

    [customController.navigationController pushViewController:newController animated:YES];
    // Similarly for tabBarController ...
    
    嵌套的ViewController(即,在由实际位于NavController堆栈上的ViewController控制的视图内)无法直接访问其父视图的控制器是堆栈成员的UINavigationController。这是一个满嘴的句子,但它的意思是:你不能从这里到达那里

    相反,你必须通过应用程序代理访问应用程序的导航控制器

    YourAppDelegate *del = (YourAppDelegate *)[UIApplication sharedApplication].delegate;
    [del.navigationController pushViewController:nextViewController animated:YES];
    
    您正在使用UIApplication的singleton(包含有关应用程序的各种良好信息),它具有指向AppDelegate的.delegate属性,并且包含对NavigationController的引用


    无论如何,“基于导航的应用程序”Xcode模板就是这样设置NavController所有权的。YMMV如果你自己做的话——但是如果你做了,你可能不需要问这个问题。

    你可以使用以下说明:

    [(UINavigationController *)self.view.window.rootViewController pushViewController:vc animated:YES];
    

    这对我很有用:我对你的意思有点困惑。堆栈将如下所示。1.导航控制器->根视图控制器->2.导航控制器->AViewConroller,我想要的是AViewController将新的viewcontroller推送到1.导航控制器上。但不管我怎么做,它总是把它推到2.导航控制器上?如果这能让事情更清楚的话,idk。抱歉。嘿,我更新了我的帖子以匹配你的评论。堆叠两个导航控制器有点奇怪,因为其中一个和另一个做相同的事情。不管怎样,检查我的建议,因为它可能会工作,但我不是100%肯定。对不起,我知道这是奇怪的,我没有真正给出一个背景。我有一个选项卡栏控制器,它有3个选项卡/控制器。1.家2。搜索3。设置。在根视图中有3个不同的表,它们具有导航控件->表视图控制器。它们显示警报、监视列表和以前的搜索。因此,在watchlist视图控制器中,当您按view documents箭头时,我希望它接管顶部导航控制器,以便显示整个屏幕。但不幸的是,你给我的代码不起作用。好吧,我不知道你到底想要什么。您所说的“接管顶部导航控制器,使其显示整个屏幕”是什么意思?您最初的问题是如何从其中一个堆叠视图控制器访问导航控制器,并为此使用navigationController属性。因此,您可以从任何堆叠视图控制器调用navigationController来访问“父”导航控制器。也许你可以编辑你的原始问题更详细,因为我不确定我是否完全遵循。对不起,没有接管,只是推一个视图。我的问题是如何获取原始堆栈,而不是第二个堆栈。在iOS 4.0作为部署目标的情况下,代码“del.navigationController”会出现生成错误:“请求非结构或联合中的成员navigationController”@Marcel——您的应用程序委托将导航控制器作为命名属性,对吗?错误:在类型为“AppDelegate*”的对象上找不到属性“navigationController”。仅当您将导航控制器存储在应用程序委派中时,此选项才有效。这不是标准。