ECSlidingViewControllerを使用して、スタイル付きメニューにスライドを含むアプリケーションを実装しました
現在、次のセットアップがあります。ECSlidingViewController の初期ビュー コントローラー サブクラス。これは、トップ ビュー コントローラー (画面に表示されるメイン ビュー) とメニューである underLeftController のプッシュを処理します。
メニューは、行がクリックされたときのテーブルビュー コントローラーのサブクラスであり、新しいトップ ビュー コントローラーがスタックにプッシュされます。
前の質問によると、単一のルート ビュー コントローラーを保持するナビゲーション コントローラー (サブクラス化) を使用します。行が選択されるたびに、ナビゲーション コントローラーの新しいインスタンスが別のビュー コントローラーと共に読み込まれ、古い割り当てが解除されます。例えば:
// Check if the settings view is currently displayed if it is just reset the top view else load it to the topviewcontroller.
UINavigationController *navController = (UINavigationController *)self.slidingViewController.topViewController;
UIViewController *VC = navController.topViewController;
if ([VC isKindOfClass:[MESSettingsViewController class]]) {
[self.slidingViewController resetTopView];
} else {
MESMainNavViewController *mainNavController = [[MESMainNavViewController alloc] initWithRootViewController:[self.storyboard instantiateViewControllerWithIdentifier:@"SettingsVC"]];
__weak typeof(self) weakSelf = self;
[self.slidingViewController anchorTopViewOffScreenTo:ECRight animations:nil onComplete:^{
CGRect frame = self.slidingViewController.topViewController.view.frame;
self.slidingViewController.topViewController = mainNavController;
self.slidingViewController.topViewController.view.frame = frame;
[weakSelf.slidingViewController resetTopViewWithAnimations:nil onComplete:^{
[weakSelf updateCurrentCell];
}];
}];
}
現時点では、これはすべて正常に機能しています。私が抱えている問題は、ログインシーケンスにあります。ユーザーがログアウトすると、別のナビゲーション スタックがモーダルにプッシュされます。ユーザーがログインに成功すると、通知が行われます。これは、(上から) Initial View Controller によって受信されます。
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didLoginUser) name:@"LoginCompleteNotification" object:nil];
次に、このメソッドは、ホーム コントローラーをルートとして、問題のサブクラス化されたナビゲーション コントローラーの新しいインスタンスにユーザーをプッシュする処理を行います。
// If the view controller is not home send them to home
UINavigationController *navController = (UINavigationController *)self.topViewController;
UIViewController *VC = navController.topViewController;
if (![VC isKindOfClass:[MESHomeViewController class]]) {
UIStoryboard *storyboard;
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil];
} else if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPad" bundle:nil];
}
MESMainNavViewController *mainNavController = [[MESMainNavViewController alloc] initWithRootViewController:[self.storyboard instantiateViewControllerWithIdentifier:@"HomeVC"]];
self.topViewController = mainNavController;
[self resetTopView];
}
問題は次の部分にあるようです。
MESMainNavViewController *mainNavController = [[MESMainNavViewController alloc] initWithRootViewController:[self.storyboard instantiateViewControllerWithIdentifier:@"HomeVC"]];
self.topViewController = mainNavController;
ナビゲーション コントローラーのこの新しいインスタンスが作成されると、デリゲート メソッドwillShowViewController
が呼び出されないように見えますか? メニューテーブルビューを介してコントローラーが変更され、同じメソッドを使用して作成すると、それが呼び出されます。何か考えはありますか?