20

我正在使用带有情节提要的 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>

我也有旋转的问题,它不能正常工作。

4

11 回答 11

18

如果您尝试在 viewWillAppear 中推送、呈现或弹出视图控制器,则会出现此警告。我不知道您的代码中有什么,因此很难确定您的问题,但如果您尝试在 viewWillAppear 中显示新视图,请尝试使用它。

[self performSelector:@selector(yourMethod)
               withObject:nil afterDelay:0.0];
于 2014-12-16T19:59:32.490 回答
11

viewDidAppear:而是展示控制器。

于 2015-02-28T21:46:59.487 回答
11

我在尝试从 viewWillAppear 呈现 UIAlertController 时遇到了类似的情况。由于 Swift 中不存在 performSelector,我以这种方式包装了我的调用:

dispatch_async(dispatch_get_main_queue()), {
    presentYourVCHere;
});
于 2015-05-25T22:20:01.390 回答
8

尝试从 rootVC 推送:

[self.view.window.rootViewController.navigationController pushViewController:YOUR_VIEW_CONTROLER animated:YES];
于 2014-09-25T20:17:10.317 回答
3

尝试在 viewDidAppear 中调用相同的操作。此警告是由于我们在 viewDidLoad 或 viewWillAppear 方法中显示任何视图。

所以在 override func viewDidAppear(animated: Bool) { ... }

于 2015-09-10T10:31:03.870 回答
2

我试图UIViewController从一个splitViewController.

这就是解决我的问题的方法:

self.view.window.rootViewController.present(yourViewController, animated: true, completion: nil)
于 2020-05-03T17:38:39.930 回答
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];
}
于 2016-04-07T11:33:10.560 回答
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. 
})
于 2015-07-19T04:44:59.507 回答
1

None of the answers helped me. And here the code which I used to resolve the issue.

let topViewController = (self.navigationController?.viewControllers.last)! as UIViewController
topViewController.presentViewController(secondView, animated: true, completion: nil)

Hope this will help someone :)

于 2016-08-23T09:00:18.127 回答
1

从嵌套在另一个 UIViewController (vc1) 中的 UIViewController (vc2) 呈现 UIAlertController 时,我遇到了同样的错误

我这样解决了:

[vc1 addChildViewController:vc2]

之后,我可以从 vc2 呈现 UIAlertController 而不会出现任何错误消息。

于 2016-03-03T17:04:24.110 回答
0

相同问题请点击以下链接:

https://stackoverflow.com/a/43268601/2226399

于 2017-03-27T06:37:33.623 回答