【问题标题】:UINavigation Controller is not working with present modelviewcontrolllerUINavigationController 不适用于当前模型视图控制器
【发布时间】:2014-05-22 08:17:20
【问题描述】:

我正在使用导航控制器:

  1. 所以,从我的第一个视图到我通过推送视图控制器进入第二个视图

  2. 并形成第二个视图,通过当前模型视图控制器进入第三个视图

  3. 现在我的问题是,在第三个视图上,我想通过推送视图控制器进入第四个视图,但是当我尝试推送第四个视图时没有任何反应,我现在该怎么办?

我正在使用此代码

在我的 delegate.h 文件中,我创建了一个导航控制器的属性:

   @property (strong, nonatomic) UINavigationController *navigationControler;
   @property (strong, nonatomic) ViewController *loginViewController;

在我的 delegate.m 文件中:

    self.loginViewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
    self.navigationControler = [[UINavigationController alloc] initWithRootViewController:self.loginViewController];
    self.window.rootViewController = self.navigationControler;
    [self.window makeKeyAndVisible];       

当我像这样通过预设模型视图控制器进入第三个视图时:

Redeem *redeem = [[Redeem alloc] init];
[self presentViewController:redeem animated:YES completion:nil]; 

在到达第二个视图后,我想用这样的推送视图进入第三个视图

    [self dismissViewControllerAnimated:YES completion:^(void){
     MyPurchaseCards *mypurchase = [[MyPurchaseCards alloc] init];
    [self.navigationController presentViewController:mypurchase animated:YES completion:nil];
}];

但什么也没有发生,当我尝试像这样获取所有以前的控制器时也没有发生任何事情

   NSArray *arr = self.navigationController.viewControllers;
   NSLog(@"%@",arr);

但数组显示空值。为什么??????

【问题讨论】:

    标签: objective-c model-view-controller navigationcontroller


    【解决方案1】:

    问题在于,当您使用 presentViewController 呈现 third 控制器时,您的主控制器现在是 third 并且它是顶部的控制器屏幕(称为presentedViewController)。

    如果你将 fourth 控制器推送到导航堆栈上,它会被推送,但你看不到它,因为它在 第三 之下>,因为第三个​​是你的顶级控制器,它是屏幕顶部的控制器。

    为了加载第四个控制器,您必须:

    • 关闭第三个​​并在完成块中...
    • ...推动第四

    【讨论】:

    • 是的,我照做了,但这是回到第二个视图而不是第四个视图检查这个。 [self dismissViewControllerAnimated:YES 完成:^(void) { MyPurchaseCards *mypurchase = [[MyPurchaseCards alloc] init]; [self.navigationController pushViewController:mypurchase animated:YES]; }]; @Marco 佩斯
    • 很奇怪,我在当前项目中使用了相同的代码,它可以工作。你可以在dismissViewControllerAnimated之前和pushViewController之后发布导航控制器数组吗?
    • 你的意思是首先我在解雇之前获得导航数组..然后发送给你??? @宏步伐
    • 好的,当我得到所有的导航控制器并保存在 NSArray 但数组显示空值时,我的数组 NSArray *allViews = self.navigationController.viewControllers; NSLog(@"%@",allViews); @Marco Pace
    • 嗯,有些奇怪。你能发布一些你的实现代码吗?也许这是阅读代码的简单修复。
    【解决方案2】:

    我的猜测是您的第三个视图控制器没有包装在导航控制器中。您可能希望创建一个导航控制器,并将第三个视图控制器作为根视图控制器,而不是直接推送第三个视图控制器。然后您就可以使用您提到的代码推送您的第四个视图控制器。

    【讨论】:

      猜你喜欢
      • 2011-07-30
      • 1970-01-01
      • 2016-07-29
      • 1970-01-01
      • 2013-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-20
      相关资源
      最近更新 更多