:これは私がVC2の中からUISplitViewControllerを消す可能性が発見された最良の方法でした。これは古い問題だと思われますが、StackOverflowで見つかったのは、上記のような試み(「上記の回答」のような)や「ハックアラウンド」のときに問題が発生する理由の説明でした。
ただし、コードベースの多くを変更してUISplitViewControllerを初期オブジェクトにして、機能を起動して実行させるだけではあまり便利でないことがあります。
この記事では、アップルのガイドラインを含め、皆様を幸せにする方法があります。私は最善の解決策たが、通常UISplitViewControllerを使用していたが、表示されるために必要なときに/却下、次のようなアプローチを使用します。
-(void)presentWithMasterViewController: (UIViewController *) thisMasterViewController
andDetailViewController: (UIViewController *) thisDetailViewController
completion:(void(^)(void))completion
{
masterViewController = thisMasterViewController;
detailViewController = thisDetailViewController;
[self setViewControllers:[NSArray arrayWithObjects:masterViewController, detailViewController, nil]];
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.window.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight;
self.window.rootViewController = self;
[self.window makeKeyAndVisible];
if(completion)
completion();
}
-(void)dismissViewControllerWithCompletion:(void (^)(void))completion
{
self.window = nil;
masterViewController = nil;
detailViewController = nil;
if(completion)
completion();
}
「ウィンドウ」を、あなたのUISplitViewControllerサブクラスのプロパティです。システムは残りの部分を処理します!
ModalSplitViewController
--EXAMPLE使用方法について -
mySplitViewController = [[ModalSplitViewController alloc] init];
mySplitViewController.delegate = self;
[mySplitViewController presentWithMasterViewController:masterViewController andDetailViewController:detailViewController completion:nil];
// when done:
[mySplitViewController dismissViewControllerWithCompletion:nil];
mySplitViewController = nil;
余談:
は便利/参考のために、私はgithubのにUISplitViewControllerサブクラスとしてこれをアップロードし、私は推測しますほとんどの混乱は、 AppleドキュメントのUISplitViewの使用例がappDelegateで作成された ウィンドウを使用していることと、ほとんどの人が01ではないという事実から生じていますは、ウィンドウのコンセプトに精通しています。通常は、 (StoryBoardsまたは定型コードでは一度作成されます)を使用する必要がないためです。
さらに、状態の復元を行っている場合、 は、プログラムによって作成されたUIViewControllerが自動的にシステムによって復元されないことを忘れてはなりません。
代替はXcodeの8、iOSの上では動作しませ –
upvotedとして、サイズのためのアフターマーケットsplitviewコントローラを試してみることです8+ エラーログがあります:「ビューは一度に1つのView Controllerにしか関連付けられません!」 –