UINavigation Controller不使用现有的modelviewcontrolller

时间:2014-05-22 08:17:21

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

我正在使用导航控制器:

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

  2. 通过现有的模型视图控制器

  3. 形成第二个视图到第三个视图
  4. 现在我的问题是,在第三个视图中我想通过推视控制器进入第四个视图,但是当我尝试推送第四个视图时,没有任何事情发生,我现在做了什么?

  5. 我正在使用此代码

    在我的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];       
    

    当我通过presetmodelviewcontroller进行第三次查看时:

    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);
    

    但是数组显示空值。 WHY ?????

2 个答案:

答案 0 :(得分:0)

问题是,当您使用presentViewController呈现第三个​​控制器时,您的主控制器现在是第三个​​,它是顶部的控制器屏幕(称为presentedViewController)。

如果您在导航堆栈上按第四个控制器,它被推送,但由于它位于第三个​​,因为第三个​​是您的顶级控制器,它是屏幕顶部的控制器。

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

  • 解雇第三个​​并在完成块中......
  • ...按第四

答案 1 :(得分:0)

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