当前视图控制器不适用于 ios 9

Posted

技术标签:

【中文标题】当前视图控制器不适用于 ios 9【英文标题】:Present View Controller not working with ios 9 【发布时间】:2015-11-17 14:00:31 【问题描述】:

, 当我按下按钮时,它不会重定向到当前视图控制器。

为什么会这样?

我试过下面的代码

 RegistrationViewController * viewController =[[UIStoryboard storyboardWithName:@"Registration" bundle:nil] instantiateViewControllerWithIdentifier:@"RegistrationViewController"];
 [self presentViewController:viewController animated:YES completion:nil];

我也试过下面的代码

 UIStoryboard* storyboard = [UIStoryboard storyboardWithName:@"Registration"
                                                         bundle:nil];
 RegistrationViewController *add =
 [storyboard instantiateViewControllerWithIdentifier:@"RegistrationViewController"];
 [self presentViewController:add animated:YES completion:^
        dispatch_async(dispatch_get_main_queue(), ^
            [self presentViewController:add
                               animated:YES
                             completion:nil];
        );
  ];

编辑

我的完整代码在这里。我正在使用 Xcode 7 并使用 ios 9 运行它

#import "LoginViewController.h"
#import "RegistrationViewController.h"

@interface LoginViewController ()

@end

@implementation LoginViewController

- (void)viewDidLoad 
    [super viewDidLoad];
    // Do any additional setup after loading the view.


- (void)didReceiveMemoryWarning 
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.



- (IBAction)actionRegistrationClicked:(id)sender

    RegistrationViewController * viewController =[[UIStoryboard storyboardWithName:@"Registration" bundle:nil] instantiateViewControllerWithIdentifier:@"RegistrationViewController"];
     [self presentViewController:viewController animated:YES completion:nil];


@end

注册视图控制器

#import "RegistrationViewController.h"

@interface RegistrationViewController ()

@end

@implementation RegistrationViewController

- (void)viewDidLoad

    [super viewDidLoad];
    // Do any additional setup after loading the view.


- (void)didReceiveMemoryWarning

    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.


@end

【问题讨论】:

是的,你可以看到代码,我写在我的问题中 检查[storyboard instantiateViewControllerWithIdentifier]是否返回视图控制器实例。 @Florence 你能把你的完整代码放到pastebin吗? 我想知道它不起作用。你想要团队查看或发送源代码:P @Florence @Florence 我怀疑控制器正在初始化。请确保在您的操作方法中再次设置调试点,即视图控制器实例已初始化,并且它是通过强制转换为视图控制器来实现的 RegistrationViewController 的实例,如下所示:(RegistrationViewController*)[[UIStoryboard storyboardWithName:@.... 【参考方案1】:

确保presentedViewController 为nil。如果presentedViewController 不为nil,则将代码更改为以下代码。

RegistrationViewController * viewController =[[UIStoryboard storyboardWithName:@"Registration" bundle:nil] instantiateViewControllerWithIdentifier:@"RegistrationViewController"];

if ([self presentedViewController]) 
    [[self presentedViewController] dismissViewControllerAnimated:NO completion:^
        dispatch_async(dispatch_get_main_queue(), ^
            [self presentViewController:viewController animated:YES completion:nil];
        );
    ];
 else 
    [self presentViewController:viewController animated:YES completion:nil];


【讨论】:

您在展示视图控制器时是否收到任何警告?【参考方案2】:

尝试在

中查看viewDidAppear
  -(void)viewDidAppear:(BOOL)animated 
         [self presentViewController:viewController animated:YES completion:nil];
    

【讨论】:

在这种方法中总是调用 super。【参考方案3】:

试试下面的代码:

RegistrationViewController * viewController = [[self.storyboard instantiateViewControllerWithIdentifier:@"RegistrationViewController"];

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

【讨论】:

我认为您正在展示您已经在其中的同一个 viewController。 没办法,我在登录视图控制器中,我要展示注册视图控制器。 登录和注册视图控制器不必在同一个故事板中。@balaji

以上是关于当前视图控制器不适用于 ios 9的主要内容,如果未能解决你的问题,请参考以下文章

CATiledLayer 不适用于我的 iOS5 项目

ios 8 的旋转问题,用于添加到 Windows 的视图

iOS - 自动布局不适用于主 UIView - (内部截图)

如何在 ios 9 中以编程方式导航到另一个具有“当前上下文”表示的视图控制器,目标 C

UINavigationController 中的 UITabBarController 适用于 iOS 8 但不适用于 7

Unwind segues 不适用于模态视图控制器