20

ストーリーボードでxcode 5.1.1を使用しています。メインメニューにボタンがあり、このコードで別のView Controllerにポップします

VC *secondVC = [[VC alloc] init];
[self presentViewController:secondVC animated:YES completion: nil];

そして、このコードで戻るボタンがあります

[self dismissViewControllerAnimated:YES completion: nil];

そして、secondVC xcodeにポップすると、エラーが表示されます:

デタッチされたView ControllerにView Controllerを提示することはお勧めできません<UINavigationController: 0x8c94510>

回転にも問題があり、適切に機能しません。

4

11 に答える 11

18

viewWillAppear でビュー コントローラをプッシュ、提示、またはポップしようとすると、この警告が表示されます。コードの内容がわからないので、問題を特定するのは難しいですが、viewWillAppear で新しいビューを表示しようとしている場合は、これを使用してみてください。

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

viewWillAppear から UIAlertController を提示しようとしたときに、同様の状況に遭遇しました。performSelector は Swift には存在しないため、呼び出しを次のようにラップしました。

dispatch_async(dispatch_get_main_queue()), {
    presentYourVCHere;
});
于 2015-05-25T22:20:01.390 に答える
11

viewDidAppear:代わりにコントローラを提示してください。

于 2015-02-28T21:46:59.487 に答える
8

rootVC からプッシュしてみてください:

[self.view.window.rootViewController.navigationController pushViewController:YOUR_VIEW_CONTROLER animated:YES];
于 2014-09-25T20:17:10.317 に答える
2

から を提示しようとしていUIViewControllerましたsplitViewController

これが私の問題を解決したものです:

self.view.window.rootViewController.present(yourViewController, animated: true, completion: nil)
于 2020-05-03T17:38:39.930 に答える
1

答えはどれも私を助けませんでした。そして、ここで問題を解決するために使用したコード。

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

これが誰かを助けることを願っています:)

于 2016-08-23T09:00:18.127 に答える
1

別の UIViewController (vc1) 内にネストされた UIViewController (vc2) から UIAlertController を提示すると、同じエラーが発生しました。

私はそれを次のように解決しました:

[vc1 addChildViewController:vc2]

それを行った後、エラーメッセージなしで vc2 から UIAlertController を提示できました。

于 2016-03-03T17:04:24.110 に答える
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 に答える