私はUINavigationControllerのサブクラスであるABPeoplePickerNavigationControllerを使用しています。コンテキストでは、右側のデフォルトのナビゲーションバーボタン「キャンセル」は意味をなさないものです。私はそれを無効にするか隠す方法を見つけ出すことができず、どのような方法を公開し、店で承認する必要があります。 ナビゲーションバーが完全になくなる(picker.navigationBarHidden = YES;)ことは、ナビゲーションバーが再び表示される連絡先のリストにポップバックした後を除いて、オプションになる可能性があります。 ABPeoplePickerNavigationControllerをサブクラス化して、キャンセルしようとするviewWillAppearを傍受します。キャンセルボタンが機能しませんでした。 [picker setAllowsCancel:NO];動作しますが、文書化されていませんので、承認を得ることは決してありません。ABPeoplePickerNavigationController - プライベートメソッド/プロパティを使用せずに[キャンセル]ボタンを削除しますか?
答えて
これには答えはありません。取り消しに同行できない場合は、新しい人物ピッカーを作成してください。
あなたは単に "人の選択"を書くことはできません - あなたはアドレス帳の許可を求める必要があります。 Appleのデフォルトのピッカーはシステム権限を必要としません。 – Zorayr
この結果は、ピッカーのサブビューで参照できます。ちょっと退屈です...
PeoplePickerControllerコントローラに代理人を設定します。 デリゲートクラスには、このデリゲートメソッドがあります。
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
UIView *pCustomView = [[UIView alloc] initWithFrame:CGRectMake(0,0,0,0)];
UIBarButtonItem *pBtn = [[UIBarButtonItem alloc] initWithCustomView:pCustomView];
[viewController.navigationItem setRightBarButtonItem:pBtn animated:NO];
[pBtn release];
[pCustomView release];
}
私はまだ試していないが、私はUbyはあなたがisKindOfClassあるものを見つけるまで、ピッカーのサブビューを反復処理するために言っていると思う:[UIBarButtonItemクラス]、その後、あなたはそれがタイトルプロパティの変更することができます。また、navigationBarの 'Item'配列内にあることもあります。
は、次のメソッドを実装したクラスにピッカーオブジェクト(ないpeoplePickerDelegate、ちょうど代理人)のためのデリゲートを設定してください:
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
UIView *custom = [[UIView alloc] initWithFrame:CGRectMake(0,0,0,0)];
UIBarButtonItem *btn = [[UIBarButtonItem alloc] initWithCustomView:custom];
[viewController.navigationItem setRightBarButtonItem:btn animated:NO];
[btn release];
[custom release];
}
それが正常に動作しますが、iOSの4中1つのより多くの事があります。 Fast App Switching機能を使用して自分のアプリに戻ると、キャンセルボタンが再度表示されます。
方法
- (void)navigationController:(UINavigationController *)navigationController
willShowViewController:(UIViewController *)viewController
animated:(BOOL)animated
は呼び出されません。だから私はこれを作った:
- (void)applicationDidEnterBackground:(UIApplication *)application {
id topView = pickerControllerDelegate.peoplePicker.topViewController;
topView.navigationItem.rightBarButtonItem = nil;
}
それはかなりうまくいく。
この1
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
UIView *custom = [[UIView alloc] initWithFrame:CGRectMake(0.0f,0.0f,0.0f,0.0f)];
UIBarButtonItem *btn = [[UIBarButtonItem alloc] initWithCustomView:custom];
//UIBarButtonItem *btn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(addAction)];
[viewController.navigationItem setRightBarButtonItem:btn animated:NO];
[btn release];
[custom release];
}
完璧な作品!
デリゲートメソッドnavigationController:willShowViewController:animated:を使用した例ここでは、独自のナビゲーション項目を独自のコントローラに追加したい場合があります。あなた自身のコントローラーで。 2つのビューコントローラがナビゲーションコントローラのスタックであること
- (void)navigationController:(UINavigationController *)navigationController
willShowViewController:(UIViewController *)viewController
animated:(BOOL)animated {
// Here we want to remove the 'Cancel' button, but only if we're showing
// either of the ABPeoplePickerNavigationController's top two controllers
if ([navigationController.viewControllers indexOfObject:viewController] <= 1) {
viewController.navigationItem.rightBarButtonItem = nil;
}
}
ノート、コンタクトグループや連絡先リストのいずれかの1:ここで私が正常にうまく機能するには、このオプションを取得するために使用したコードです。これは、単にviewControllerがナビゲーションコントローラのトップビューコントローラであることを確認できない理由です。
編集:下記のコメントを参照してください。これは今やしてはならないことの実例です。
私は、ABPeoplePickerNavigationControllerをサブクラス化し、現在のナビゲーションビューコントローラビューを変更するすべてのイベントをインターセプトすることで、パブリックAPIで目的の動作を取得しようとしました。次に、ビュー階層をナビゲートし、不要なボタンをすべて消去するだけです。
デリゲートからビュー階層をナビゲートすることはできますが、ビューステートを変更するイベントには関与していないため、[キャンセル]ボタンを強制終了して固執することはありません。
の種類が私のために働いたこのコード(注:これは、ブルートフォースを殺し、すべての右ボタン):
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
[self killCancelButton];
}
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated {
[super pushViewController:viewController animated:animated];
[self killCancelButton];
}
- (UIViewController*)popViewControllerAnimated:(BOOL)animated {
UIViewController *result = [super popViewControllerAnimated:animated];
[self killCancelButton];
return result;
}
- (void)killCancelButton {
for (NSUInteger itemIdx = 0; itemIdx < self.navigationBar.items.count; itemIdx++) {
UINavigationItem *item = [self.navigationBar.items objectAtIndex:itemIdx];
item.rightBarButtonItems = [[NSArray alloc] init];
}
}
ところで、あなたは正しいよviewWillAppear :(BOOL)はうまくいかなかった。私はビューが既に生きている後にkillCancelButtonを起動しなければなりませんでした。私のiPhone 4では不思議そうに見えませんが、古いデバイスや遅いデバイスでは面白く見えるかもしれません。 –
ABPeoplePickerNavigationControllerがモーダルとして表示されると、キャンセルボタンでアニメーションが生成されるため、問題が発生します。停止した場合にのみ、ボタンが削除されます。アー。 – n13
アドレス帳のフレームワークからモデルデータを取得して自分のビュー/コントローラを構築しましたが、これは上記のように不吉な結果を招いたためです。私は誰もが暴力的な安心感を誤解していないことを願っています。 –
あなただけ上書きする可能性がbのラッセルに応じてご
viewdidapperが、これは私の仕事:
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
UINavigationItem *item = (UINavigationItem *)[self.navigationBar.items lastObject];
item.rightBarButtonItems = [[NSArray alloc] init];
item.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(addPerson)];
}
- 1. ABPeoplePickerNavigationControllerのキャンセルボタンを削除します。 iOS 4.xの不思議な動作
- 2. エンティティフレームワークを使用してベーステーブルから削除せずにテーブルを削除せずにテーブルを削除する
- 3. リモートブランチを削除せずにローカル "リモートブランチ"を削除しますか?
- 4. カスタムカメラからキャンセルボタンを削除する
- 5. iPhoneでOKまたはキャンセルボタンを使用してpickerviewを削除する方法
- 6. ppa-purgeを使用せずにubuntuのppaを削除する
- 7. 削除演算子を使用せずにC++をコンパイルする
- 8. 制約を使用せずに外部キーを削除できますか?
- 9. nhibernate:削除せずにコレクションからオブジェクトを削除する
- 10. ポッドを削除せずにサービスから削除する方法
- 11. T-SQLクエリを使用せずに誤ってテーブルを削除しました -
- 12. VB.Netで列を削除せずにリストビューをクリアしますか?
- 13. MVCパターンを使用せずにページからViewStateエントリを削除したい
- 14. ローカルリポジトリのコードを削除せずに最後のGithubコミットを削除します
- 15. Hibernate - オブジェクトを削除せずにオブジェクト参照を削除する
- 16. JS - コンテンツを削除せずにタグを削除する
- 17. Cassandra:テーブル構造を削除せずにデータを削除する
- 18. データを削除せずにHive外部テーブルを削除する
- 19. 投稿ヘッダーを削除せずにページヘッダーを削除する
- 20. location.replaceを使用せずにヒストリブラウザから現在のページを削除する
- 21. JSを使用せずにASP.NET MVCでリストから項目を削除する
- 22. EntityManager.remove()は削除クエリを生成せず、エンティティを削除しません
- 23. オブジェクトのインデックスを使用せずにテーブルをループして削除する
- 24. groovyを使用してテキストファイルを削除せずに消去する方法
- 25. Brightway2:アクティビティをdictとしてアクティビティを使用せずに変更/削除する
- 26. データソースからアイテムを削除せずにリストからアイテムを削除する - c#
- 27. TabBarアプリケーションのABPeoplePickerNavigationController
- 28. オブジェクトを無効化せずにオブジェクトを削除します
- 29. Hibernate:Hibernateを使って子オブジェクトを削除せずに親オブジェクトを削除できますか?
- 30. データベースから削除せずに削除ボタンを押すと、インデックスページのテーブルから行を削除するには
してみてください、このhttps://gist.github.com/2970980 –
これは役立つかもしれませんhttp://www.scott-sherwood.com/ios5-removing-the-cancel-button-on-abpeoplepickernavigationcontroller/ – c0d3Junk13
私は同じ問題に立ち往生しています、そして、ちょうどこれがAppleによって絶対嘲笑であると言いたいと思います。はい、setAllowsCancelまたはsetAllowsCardEditingを使用すると、アプリケーションが拒否されます。 – c0d3Junk13