23

iOS 7 を使用してコンパイルおよび実行する - モーダル ビュー コントローラーを提示しているときに、「切り離されたビュー コントローラーにビュー コントローラーを提示することは推奨されません」という警告メッセージが表示されます。iOS 6 以前のバージョンで問題が発生したことはありません。モーダル ビュー コントローラーの表示中に何か変更があった場合、誰でも表示できますか?

SearchViewController *controller1;
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
{
    controller1 = [[SearchViewController alloc] initWithNibName:@"SearchViewController-iPad" bundle:nil];
}
else
{
   controller1 = [[SearchViewController alloc] initWithNibName:@"SearchViewController" bundle:nil];
}
controller1.delegate = self;
[[self navigationController] presentModalViewController:controller1 animated:YES];

*編集*ここにコードがあります誰かがネストされている場所を指摘できますか。それらがネストされているように見えます。子ビューコントローラーパターンを使用してリンクする方法を提案してください。

(void)applicationDidFinishLaunching:(UIApplication *)application
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
    {
        self.loginRootviewController =   [[MainViewController alloc] initWithNibName:@"MainViewController-iPad" bundle:nil];
    }
    else
    {
       self.loginRootviewController =   [[MainViewController alloc] initWithNibName:@"MainViewController" bundle:nil];
    }

    UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:self.loginRootviewController];


    DDMenuController *rootController = [[DDMenuController alloc] initWithRootViewController:navController];
    _menuController = rootController;



    AppMainMenuViewController *leftController = [[AppMainMenuViewController alloc] init];
    rootController.leftViewController = leftController;
    self.loginRootviewController.delegateLogin = leftController;

    self.window.rootViewController = rootController;

    self.window.backgroundColor = [UIColor whiteColor];
    [self.window makeKeyAndVisible];

}
4

11 に答える 11

18

ストーリー ボードが、ビュー コントローラーをルート ビュー コントローラーに何らかの方法で接続するセグエを認識しない場合、ビュー コントローラーはデタッチされます。

ストーリーボードを使用している場合は、モーダル ビューであっても、Interface Builder を使用してセグエを作成し、コードで呼び出すことをお勧めします。

XCode 4.6.x と iOS 6.x でも、ビルド時にビュー コントローラーが接続されていないという警告が表示されました。

2 つのストーリーボード (iPhone 用と iPad 用) がある場合は、それぞれのセグエに同じ名前を付けることができます。セグエ識別子は、ストーリーボードごとに一意である必要があります。したがって、同じ識別子を使用してセグエ ( performSegueWithIdentifier ) を実行すると、iPhone と iPad の別の場所に移動できます。

于 2013-09-16T19:25:28.107 に答える
7

DDMenuViewController を使用している場合、これは簡単に修正できます。、 、 および に追加するだけ[self addChildViewController:controller];です。initWithRootViewControllersetRightViewControllersetLeftViewController

于 2013-09-30T20:56:57.700 に答える
4

プッシュ ナビゲーションで警告が表示されないようにするには、以下を直接使用できます。

[self.view.window.rootViewController presentViewController:viewController animated:YES completion:nil];

そして、モーダルView Controllerで、すべてが終了したら、次のように呼び出すことができます:

[self dismissViewControllerAnimated:YES completion:nil];

于 2014-01-08T18:33:32.380 に答える
1

[self presentViewController:vc animation:NO 完了:nil] を呼び出しています。viewDidAppear で問題が修正されました。

于 2014-10-27T13:58:40.523 に答える
0

ストーリーボードを使用している場合は、新しいビュー コントローラーを表示するコードを viewDidAppear に配置する必要があることがわかりました。また、「... の外観遷移を開始/終了する呼び出しが不均衡です」という警告も削除されます。

于 2016-04-07T01:09:17.383 に答える
0

私も同じ問題を抱えていました。しかし、それは私がどのようにビューを開始したかではなく、ビューがどのように構成されたかでした。ビューのクラスを、ファイルの所有者ではなくビュー コントローラー クラスに誤って設定してしまいました。手がかりは、ビューが表示されたということでしたが、スタイルの一部が欠落していました。奇妙なことは、それが古いバージョンの iOS で動作していたことです。

于 2014-05-14T14:23:20.620 に答える
-5

iOS 7 では、presentModalViewController は廃止されました。

私はそれを

[self.navigationController pushViewController: アニメーションを表示: はい];

そして、私が得ていた多くのエラーを修正しました。

試すだけの価値があります。

于 2013-10-19T00:50:09.127 に答える