不支持推送导航控制器

2020/12/01 05:11 · ios ·  · 0评论

在我的MainStoryBoard中,我想将viewController推送到detailView,但出现此错误:

NSInvalidArgumentException”,原因:“不支持按导航控制器”

我在情节提要上为viewController设置了标识符“ JSA” ID。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (indexPath.row == 0) {
        SWSJSAViewController *viewController = [[UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil] instantiateViewControllerWithIdentifier:@"JSA"];
        [self.navigationController pushViewController:viewController animated:YES];
    }
}

就像rmaddy在评论中说的那样,您正在尝试推送导航控制器。

应该显示导航控制器(通过presentViewController或可以将它们添加为childViewController),并应推送ViewController。

当您谈论推送导航控制器时,最有可能要展示它。

  1. 呈现UINavigationController

这是最常见的方法,这是大多数情况下要执行的操作。UINavigationController无法推送,只能使用新的根View Controller呈现。

MyViewController* vc = [[MyViewController alloc]
      initWithNibName:@"MyController" bundle:nil];

UINavigationController *myNav = [[UINavigationController alloc] initWithRootViewController: vc];

[self presentViewController:myNav animated:YES completion:nil];

您在这里要做的是先创建一个UINavigationController,然后将必要的设置UIViewController为其根控制器。


  1. 推送UINavigationController

如果您具有ViewControllers的层次结构,并且需要推送其中包含导航控制器的View Controller,则步骤为:

1)推送ViewController,其中包含UINavigationController

要进行推送 UINavigationController,请首先创建的子类UIViewController,该子类将是您UINavigationController及其内容的包装器/容器类

ContainerViewController* vc = [[ContainerViewController alloc] init];

2)添加UINavigationController作为子视图控制器

viewDidLoad您的容器中(刚刚实例化的),只需添加以下内容:

目标C

UINavigationController* myNav = [[UINavigationController alloc] initWithRootViewController: rootViewController];
[myNav willMoveToParentViewController:self];

myNav.view.frame = self.view.frame;  //Set a frame or constraints
[self.view addSubview:myNav.view];
[self addChildViewController: myNav];
[myNav didMoveToParentViewController:self];

迅捷4.2+

let childNavigation = UINavigationController(rootViewController: viewController)
childNavigation.willMove(toParent: self)
addChild(childNavigation)
childNavigation.view.frame = view.frame
view.addSubview(childNavigation.view)
childNavigation.didMove(toParent: self)

您在这里所做的基本上是实例化导航控制器,并将其作为子控制器添加到包装器中。而已。您已经成功推送了UINavigationController。

本文地址:http://ios.askforanswer.com/buzhichituisongdaohangkongzhiqi.html
文章标签: ,   ,   ,   ,  
版权声明:本文为原创文章,版权归 admin 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!