更新
TabBarController がloginController から提示されることがわかりました。
正しい戻り方は次のとおりです。
[[self presentingViewController] dismissViewControllerAnimated:YES completion:nil];
以下のメモに残しておきますが、彼らは私たちが UINavigationController 階層を扱っていると想定していました。まだ読む価値があります!
ここに部分的な答えがあります...私がそれを書いた後、あなたのTab Bar ControllerはあなたのログインNavControllerスタックの一部ではないことに気付きました(とにかくそうは思いません)。 Segue/PUSHing が適していない理由を理解する。
後であなたのケースに対するより正確な回答で更新します...
セグエを使用したり、プッシュしたりしたくありません...カードのスタックのように考えてください。プッシュは、スタックにカードを追加することです。したがって、ログイン画面のバージョンを NavController スタックに追加します。 Tab Bar Controller 内に含まれています。これは、すでに作成したログイン画面のインスタンスと同じではなく、新しいインスタンスです (プッシュにより新しいインスタンスが作成されます)。
スタックからカードを取り除き、最初のカードに戻りたいとします。それが POP 操作です。
これらのいずれかが機能します。
- (NSArray *)popToViewController:(UIViewController *)viewController animated:(BOOL)animated
- (NSArray *)popToRootViewControllerAnimated:(BOOL)animated
それらはUINavigationController
メソッドです。UIViewController
次のように、最上位からアクセスできます。
[self navigationController] popToRootViewControllerAnimated:NO;
[self navigationController] popToViewController:myLogInViewController animated:YES;
viewController に IBAction を配置することで、ログアウト ボタンからトリガーできます。
戻りたいviewControllerが実際にルートView Controllerであるように見えるので、それを試して動作するかどうかを確認してください。そうでない場合は、元に戻したい viewController への参照が必要になります。スタックを数えることでそれを行うことができます。スタックはviewControllers
、ナビゲーション コントローラーの配列プロパティとしてアクセスされます。たとえば、rootViewController から 2 番目の viewController の場合、
UIViewController* logInViewController =
[[self navigationController] viewControllers] objectAtIndex:1];
あなたが求めているものを手に入れるでしょう。