1

私のアプリ レイアウトのより詳細な説明: テーブル ビューの行のいずれかをクリックすると、ユーザーは次の画面に移動し、[戻る] ボタンがホームに戻り、セグメント化されたコントロールが上部に表示されます。コード内のロジックによって、セグメント化されたコントロールのどのセグメントが事前選択されるかが決定されます。ユーザーは、セグメント化されたコントロールの任意のインデックスをクリックして、画面に表示されるコンテンツを変更できます。

上記のレイアウトを実装した方法は、ナビゲーション コントローラーを使用することです。セグメント化されたコントロールの「1 番目、2 番目、3 番目」に対応する各ページのコンテンツは、すべて個別のビュー コントローラーです。このようにした理由は、これらの各ページには、ユーザーが操作するための重要な機能とコントロールがあるためです。 . それぞれを個別のビュー コントローラとして保持すると、ソフトウェア コードの編成とデータの整合性が向上します. ホーム画面はナビゲーション コントローラのスタックのインデックス 0 にあり、ビュー コントローラはナビゲーション コントローラのインデックス 1 の最初に対応するなどです.ユーザーは現在、セグメント化されたコントロールで「最初」が選択された状態で 2 番目の画面にいます。ユーザーが「3 番目」をクリックすると、

2 つの質問: • 私が実装した方法について何かコメントはありますか? より良い実装のための提案はありますか? 私が検討した特定の実装の 1 つは、3 つの個別のビュー (1 番目、2 番目、3 番目にそれぞれ 1 つ) を持つ 1 つのビュー コントローラーを持つ可能性です。このアプローチに関するコメントはありますか?

•   I seem to have an extremely hard time controlling the behavior of the “back button”of the navigation controller. When the user has selected “second”in the segmented control, I would still like to have the back button saying “Home” instead of “first” which is the default behavior of the navigation controller. I have figured out how I can customize the text of the back button. However, I can't seem to figure out how to customize the behavior of the button. What I mean by that is, when the user is on "third”, and clicks on the “home button”I'd like to pop three view controllers and land the user on the home screen.

SO では、成功しなかったさまざまなテクニックを見て試してみました。 . しばらくの間、このロジックは確かにホームページに戻りますが、理解できない次のメッセージですぐにクラッシュします。

アプローチ 2: didPopItem(): この関数に次のコードを入れます

- (void)navigationBar:(UINavigationBar *)navigationBar didPopItem:(UINavigationItem *)item {

   NSLog(@"%s",__FUNCTION__);
      [[self navigationController] popViewControllerAnimated:YES];
    //ViewControllerAnimated:YES];
   NSLog(@"navcount%d",self.navigationController.viewControllers.count);
   if (self.navigationController.viewControllers.count > 1) {
         [self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:1] animated:YES];
   }

}

上記に関するコメントは大歓迎です!よろしくお願いします。

4

1 に答える 1

1

3 つのビュー コントローラーはビュー階層で実際に互いに等しいため、セグメントを切り替えるときに複数のビュー コントローラーをプッシュする代わりに、トップ ビュー コントローラーを置き換えて、3 つのビューのいずれかから「戻る」ことができるようにすることをお勧めします。コントローラーを使えば、行きたい場所にたどり着けます。

このようなものがうまくいくはずです:

- (void)replaceTopViewControllerWith:(UIViewController *)vc {
    NSMutableArray *vcs = [[self.navigationController viewControllers] mutableCopy];
    [vcs removeLastObject];
    [vcs addObject:vc];
    [self.navigationController setViewControllers:vcs animated:YES];
}
于 2012-04-21T04:52:10.853 に答える