3

次のように、ABPeoplePickerNavigationController をサブビューとして Navigation Contorller に追加したナビゲーション ベースのアプリがあります。サブビューを に追加する前にビューを保存しましたnavView

ABPeoplePickerNavigationController *peoplePicker = [[ABPeoplePickerNavigationController alloc] init];
peoplePicker.peoplePickerDelegate = self;

navView = [[UIView alloc] init];
navView = [[self.view superview] superview];

[[[self.view superview] superview] addSubview:[peoplePicker view]];

問題なく動作しますが、PeoplePicker を使い終わったら、前のビューに戻りたいと思います。このコードを使用しましたが、機能しません。

[[[self.view superview] superview] addSubview:navView];

わかりません。サブビューから navView を保存しましたが、元に戻すことはできませんか?

4

1 に答える 1

1

次のように、戻るボタンを追加する必要があります。

UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil];
self.navigationItem.backBarButtonItem = backButton;
[backButton release];   

理想的には、NavigationController はアプリケーションのルートです。この場合、他のビューはそのサブビューであるため、Navigation Controller から完全に切り替えることはなく、表示される実際のビューを変更するだけです。

また、最初のビューを参照しようとする方法は、かなり面倒/混乱します。次のように変更する必要があります。

[appDelegate.navigationController topViewController];    

また

[appDelegate.navigationController popToRootViewController];

正確なビュー階層がわからないため、どちらを使用すればよいかはわかりませんが、そのコードを最適化することを強くお勧めします。

おそらく、ナビゲーション コントローラーの [戻る] ボタンとその下の 2 つの行が異なることを行うことに注意してください。戻るボタンはビューを 1 つ戻しますが、popToRoot と topView はどちらも最初の viewController に戻ることを目的としています。

編集:戻るボタンのコードを実際に使用するコードに変更しました

Edit2:ここにもう少しスペースがあるからといって、階層構造をよりよく理解しようとすることができます。なんかこんな感じ?

Root View                     or                 Root View
-> Group View                                    -> Group View
ABPeoplePicker View                              -> ABPeople Picker View

Root View
-> Group View
-> -> ABPeoplePicker

ABPeoplePicker が Group 内にネストされ、それがルート内にネストされていることを意味しますか? あなたが実際に持っているのは最初の行の2つのうちの1つであり、必要なのは2行目であるため、機能していないと思います。実際に見てみないとどれを持っているか分からないので、何を変更すればよいか正確には言えませんが、2行目の階層のようにずっと入れ子にしたい場合は、グループビューをプッシュする必要がありますルート ビュー コントローラー (ナビゲーション コントローラー) に追加した後、ピープル ピッカーをルート ビュー コントローラーに再度プッシュします。この後、戻るボタンとビューの切り替えが希望どおりに機能するはずです。

于 2011-08-19T21:32:42.977 に答える