推送视图控制器不起作用

Posted

技术标签:

【中文标题】推送视图控制器不起作用【英文标题】:Push view controller not working 【发布时间】:2017-01-12 04:37:59 【问题描述】:

我在UIViewController 中使用UINavigationUIPageView 控制器。我有 3 个按钮,这是我的代码:

- (IBAction)StartButtonClicked:(id)sender 
     NSLog(@"start button pressed");
     [_Timer invalidate];
     _Timer = nil;

     dispatch_async(dispatch_get_main_queue(), ^
         UIStoryboard* storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
         CardViewController* controller = [storyboard instantiateViewControllerWithIdentifier:@"CardViewController"];
         [self.navigationController pushViewController:controller animated:NO];
    


- (void)pageViewController 
    self.pvc = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStyleScroll navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal options:nil];

    self.pvc.view.frame = self.view.bounds;
    [self.view addSubview:self.pvc.view];
    [self.pvc setViewControllers:@[[viewControllerArray1 objectAtIndex:0]] direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:nil];


- (IBAction)rightButtonPressed:(id)sender 
    [self pageViewController];
    [self.pvc setViewControllers:@[[viewControllerArray1 objectAtIndex:1]] direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:nil];


- (IBAction)leftButtonPressed:(id)sender 
     [self pageViewController];
     [self.pvc setViewControllers:@[[viewControllerArray1 objectAtIndex:2]] direction:UIPageViewControllerNavigationDirectionReverse animated:YES completion:nil];

当我单击右键并返回此视图控制器时,我的开始按钮的推送视图不起作用。

【问题讨论】:

请查看更新后的答案 当我第二次点击 self.navigationController.viewControllers = null. 为什么你使用 'setViewControllers' 推送使用下面的答案代码,[self.navigationController pushViewController:yourControllerObj animated:NO] 在 storyBord 中初始化如下图,然后当使用 pushViewController 推送时使用 popViewController。不要更改 NavigationController 我正在使用 setviewcontrollers 作为左/右按钮..检查我上面的代码..是不是错了 【参考方案1】:

请检查答案。 ios - Push viewController from code and storyboard

不要总是初始化 Storyboard,

UIStoryboard* storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];

您可以从 UtoryBoard 本身设置 rootViewController。 将 initialViewController 设置为 UINavigationController 并将 FirstViewController 设置为 RootViewController。

编辑: 对于 Push 使用下面的代码,

 CardViewController* controller = [storyboard instantiateViewControllerWithIdentifier:@"CardViewController"];
    [self.navigationController pushViewController:controller animated:NO];

然后返回。如果使用默认的 backButton 不需要编写任何代码。 如果使用的是自定义后退按钮,

[self.navigationController popViewController];

检查两件事,

    您的故事板标识符正确。 根视图有导航控制器。

你的 StoryBoard 应该是这样的,

【讨论】:

在“StartButtonClicked”中,您将再次初始化storyBorad。不需要再次设置storyBoard。通过 main.storyBoard 本身设置。 现在我删除了该行。单击左/右按钮并导航到其他视图控制器,然后从该视图单击返回按钮并返回此处(开始按钮不起作用但左/右键工作).. 这就是场景。 推送使用代码: CardViewController* controller = [storyboard instantiateViewControllerWithIdentifier:@"CardViewController"]; [self.navigationController pushViewController:控制器动画:否];并用于回用 [self.navigationController popViewController];

以上是关于推送视图控制器不起作用的主要内容,如果未能解决你的问题,请参考以下文章

推送新的视图控制器(以编程方式)不起作用?为啥?

在 viewDidAppear 中推送视图控制器不起作用

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

收到推送通知时显示视图控制器不起作用,其视图不在窗口层次结构中

推送后视图上的按钮将不起作用,然后呈现一个 UIViewController

在容器视图中导航时,Unwind Segue 不起作用