我正在使用带有故事板的xcode 5.1.1。我在主菜单上有一个按钮,它会弹出到另一个具有此代码的视图控制器
VC *secondVC = [[VC alloc] init];
[self presentViewController:secondVC animated:YES completion: nil];
我有这个代码的后退按钮
[self dismissViewControllerAnimated:YES completion: nil];
当我弹出secondVC时,xcode给我的错误是:
在分离的视图控制器上显示视图控制器是不鼓励
<UINavigationController: 0x8c94510>
。
我也遇到旋转问题,但无法正常工作。
答案 0 :(得分:17)
如果您尝试在viewWillAppear中推送,显示或弹出视图控制器,则会出现此警告。我不知道你的代码中有什么,所以很难确定你的问题,但如果你试图在viewWillAppear中显示新的视图,请尝试使用它。
[self performSelector:@selector(yourMethod)
withObject:nil afterDelay:0.0];
答案 1 :(得分:10)
我在尝试从viewWillAppear呈现UIAlertController时遇到了类似的情况。由于在Swift中不存在performSelector,我以这种方式包裹了我的调用:
dispatch_async(dispatch_get_main_queue()), {
presentYourVCHere;
});
答案 2 :(得分:9)
改为从viewDidAppear:
呈现控制器。
答案 3 :(得分:7)
尝试从rootVC推送:
[self.view.window.rootViewController.navigationController pushViewController:YOUR_VIEW_CONTROLER animated:YES];
答案 4 :(得分:2)
我正在尝试展示UIViewController
中的splitViewController
。
这是解决我的问题的方法:
self.view.window.rootViewController.present(yourViewController, animated: true, completion: nil)
答案 5 :(得分:1)
如果有人想知道如何使用swift(甚至可以在Objective C中使用),请使用以下代码帮助我克服上述问题。在viewDidLoad()
中使用此代码var dispatchTime: dispatch_time_t = dispatch_time(DISPATCH_TIME_NOW, Int64(0.1 * Double(NSEC_PER_SEC)))
dispatch_after(dispatchTime, dispatch_get_main_queue(), { () -> Void in
//this place to call segue or manually load the view.
})
答案 6 :(得分:1)
从a中呈现UIAlertController时遇到了同样的错误 UIViewController(vc2)嵌套在另一个UIViewController(vc1)
中我这样解决了:
[vc1 addChildViewController:vc2]
执行此操作后,我可以从vc2呈现UIAlertController而不会出现任何错误消息。
答案 7 :(得分:1)
如果弹出视图控制器发生此错误,您需要使用委托调用代码直接从父视图显示警报控制器。例如,在父视图控制器中:
-(void) showAlertError: (YourClass *) whateverParameter {
dispatch_async(dispatch_get_main_queue(), ^{
UIAlertController* alert = [UIAlertController alertControllerWithTitle:@"Your Title"
message:@"Your message"
preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction* defaultAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault
handler:^(UIAlertAction * action) {}];
[alert addAction:defaultAction];
[self presentViewController:alert animated:YES completion:nil];
});
}
在您孩子的观点中:
- (IBAction)btnDone:(id)sender{
[self.delegate showAlertError:self];
}
答案 8 :(得分:0)
没有一个答案对我有帮助。这里是我用来解决问题的代码。
let topViewController = (self.navigationController?.viewControllers.last)! as UIViewController
topViewController.presentViewController(secondView, animated: true, completion: nil)
希望这会有所帮助:)
答案 9 :(得分:0)
请点击以下链接查看同一问题: