当前视图控制器不适用于 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的主要内容,如果未能解决你的问题,请参考以下文章
iOS - 自动布局不适用于主 UIView - (内部截图)
如何在 ios 9 中以编程方式导航到另一个具有“当前上下文”表示的视图控制器,目标 C
UINavigationController 中的 UITabBarController 适用于 iOS 8 但不适用于 7