188

私のアプリでは、ナビゲーション コントローラーを使用しています。後でpresentViewController、ズームされた画像を表示するために使用しているビューで。また、ストーリーボードやペン先は使用していません。

iOS 7 でのみこのエラーが発生します。iOS 6 以前では問題なく動作します。

デタッチされたView ControllerでView Controllerを提示することはお勧めできません

4

19 に答える 19

64

この警告の理由は、フル サイズのビューではない小さなビューにビュー コントローラーを表示していたことです。以下は私のプロジェクトのイメージです。上記の 4 つのオプションをクリックします。ユーザーは別の childviewcontroller のビューに移動します (tabViewcontroller のように機能します)。ただし、childviewcontroller には小さなサイズのビューが含まれています。したがって、childviewcontroller からビューを提示すると、この警告が表示されます。

マスター詳細ビュー

これを避けるために、childviewcontroller の親にビューを提示できます。

  [self.parentViewController presentViewController:viewController animated:YES completion:nil];
于 2014-08-07T12:38:00.457 に答える
23

私の場合、のビューをサブビューとして追加し、 (ここでは代わりにインスタンス)sampleViewControllerのビューからポップオーバーを表示しようとしました:sampleViewControllerselfUIViewController

[self.view addSubview:sampleViewController.view];

正しい方法は以下のとおりです。

// make sure the vc has been added as a child view controller as well
[self addChildViewController:sampleViewController];
[self.view addSubview:sampleViewController.view];
[sampleViewController didMoveToParentViewController:self];

ところで、これはテーブルビュー セルからポップオーバーを表示する場合にも機能します。テーブルビュー コントローラーが子ビュー コントローラーとしても追加されていることを確認する必要があります。

于 2015-02-23T10:57:24.093 に答える
9

私はほとんど同じ問題を抱えています。その理由は、「ある」コントローラーを別のコントローラーに提示しようとしたためで、アニメーションが完了した後、提示されたコントローラーをルートとして設定していました。この操作の後、さらにすべてのコントローラーが表示され、「デタッチされたビューコントローラーにビューコントローラーを表示することはお勧めできません」という警告が表示されます。そして、最初にプレゼンテーションを行わずに、「一部の」コントローラーをルートとして設定するだけで、この警告を解決します。

削除:

[[self rootController] presentViewController:controller animated:YES completion:^{

       [self window].rootViewController = controller;

       [[self window] makeKeyAndVisible];}];

プレゼンテーションなしでルートとして作成するだけです:

 [[self window] setRootViewController:controller];
于 2014-06-27T09:57:46.140 に答える
7

[self.navigationController presentViewController:xxx animated:YES completion:nil]iOS8で使用。

于 2014-10-14T09:05:01.110 に答える
7

これに対する解決策の 1 つは、childviewcontroller がある場合です。

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

却下には、同じ却下ビュー コントローラを使用します。

[self dismissViewControllerAnimated:YES completion:nil];

これは私にとって完璧な解決策です。

于 2014-10-08T11:31:47.690 に答える
4

はい、別のビューにあった Alert コントローラーを表示しているときに、同じ警告メッセージが表示されました。後で、以下のように親ビュー コントローラーからアラート コントローラーを提示することで、これを回避しました。

[self.parentViewController presentViewController:alertController animated:YES completion:nil];
于 2015-05-27T05:47:22.550 に答える
3

新しいコントローラーを親View Controllerの子として表示するView Controllerを追加する必要があります。

あなたのMainViewControllerがあり、controllerAという新しいコントローラーを追加し、controllerAからc​​ontrollerBという新しいコントローラーを提示したいとしましょう。

次のように書く必要があります。

[self addChildViewController:controllerA]; //self is yourMainViewController
[self.view addsubView:controllerA.view]; 

controllerA 内では、警告なしで新しいコントローラーを提示できます

[self presentViewController:controllerB animated:YES completion:nil]; //self is controllerA
于 2015-08-21T17:59:55.083 に答える
2

カスタムナビゲーションバーがあり、それを介して AlertViewController を呼び出していたこのスレッドに到達しました。

メインのView Controllerに子として追加する必要がありました。その後、何の警告もなしにpresent itを呼び出すことができました。

Zoomed Image View Controllerメインの ViewController の子として追加する必要があります。

(例えば)

[self addChildViewController:ZoomedImageViewController];

次に、 ZoomedImageViewController を呼び出すことができます

[self presentViewController:ZoomedImageViewController];
于 2019-07-30T10:00:30.210 に答える
1

この警告には多くの理由があります。私の理由は、ViewController からモーダルに表示される別の ViewController にセグエが接続されているためです。しかし、私が提示しているViewControllerは、PageViewControllerによって動的に生成されています。これが、ストーリーボードで分離されている理由です。それが原因でアプリがクラッシュすることはありません。しかし、私は警告を黙らせたいと思います。

于 2016-04-27T15:01:32.320 に答える