選択したメニュー項目と表示された topViewController をプログラムで変更しようとしています。つまり、UITabBarController で選択したタブを変更するのと同じことをしようとしています。
[self.tabBarController setSelectedIndex:2];
したがって、別の SO の質問 ( https://stackoverflow.com/a/20309377/1161723 ) によると、これを使用して表示される topViewController を変更しています。
[self.slidingViewController anchorTopViewToRightAnimated:NO];
self.slidingViewController.topViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"MESettingsNavigationController"];
[self.slidingViewController resetTopViewAnimated:NO];
しかし、うまくいきません。最初の 2 行は正しく機能し、それぞれメニューを表示して topViewController を変更しますが、最後の行はサイドメニューを非表示にしないため、ジェスチャーまたはボタンをタップして非表示にするまでそこにとどまります。デバッグは、ECSlidingViewController のインスタンスの代わりに最後のself.slidingViewController
リターンを示します。nil
そして、最初と最後の行をスキップして、次の行だけを残すと:
self.slidingViewController.topViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"MESettingsNavigationController"];
アプリがクラッシュします。
サイドメニューを非表示にして、ビューを適切に変更する方法はありますか? ECSlidingViewController 2.0.1 を使用しています
編集:競合ブロックを使用したり、スライディングビューコントローラーへの参照を作成したりしても、違いはありません:
ECSlidingViewController *slidingViewController = self.slidingViewController;
[slidingViewController anchorTopViewToRightAnimated:NO onComplete:^{
slidingViewController.topViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"MESettingsNavigationController"];
[slidingViewController resetTopViewAnimated:NO];
}];
更新 14.7.2014:
カスタム ビュー コントローラ トランジションが使用されている場合にのみ、サイドメニューが非表示になりません。たとえば、TransitionFun の例では。
アンワインド セグエ ハンドラに次のものだけを残すと、アプリがクラッシュします。
- (IBAction)unwindModalView:(UIStoryboardSegue *)sender
{
ECSlidingViewController *slidingViewController = [self slidingViewController];
slidingViewController.topViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"METransitionsNavigationController"];
}
注:最後のビュー コントローラー (アンワインド セグエの呼び出し元) がモーダルセグエではなくプッシュセグエによって提示された場合、アプリはクラッシュしません。
ここの画像でView Controllerの階層を確認できます
(これは基本的に、NavigationVC にカプセル化され、設定のセルからのセグエによってモーダルに提示されるもう 1 つの VC を持つ TransitionFun の例です)