私はその色を変えようとします。ABPeoplePickerNavigationControllerは私のアプリケーションの色にナビバーします。ただし、変更はありません。私がそれを隠そうとしたり、少なくともステータスバーの濃淡を変えようとしても何も起こりません。どうして?
- (ABPeoplePickerNavigationController *)peoplePicker
{
if(!_peoplePicker){
_peoplePicker = [[ABPeoplePickerNavigationController alloc]init];
_peoplePicker.peoplePickerDelegate = self;
_peoplePicker.navigationBar.hidden = YES;
}
return _peoplePicker;
}
私は怠惰な私のナビゲーションコントローラをインスタンス化し、他のメソッド呼び出しビューのコントローラなどをうまく解除するように呼び出す。
編集:これは私の現在のコードです(賞金のため)。このような色の変化は起こりません:
- (ABPeoplePickerNavigationController *)peoplePicker
{
if(!_peoplePicker){
_peoplePicker = [[ABPeoplePickerNavigationController alloc]init];
_peoplePicker.peoplePickerDelegate = self;
_peoplePicker.navigationBar.tintColor = [UIColor blackColor];
}
return _peoplePicker;
}
- (IBAction)addressBookButtonClicked:(id)sender {
[self presentViewController:self.peoplePicker animated:YES completion:nil];
}
iOS8でこれ以上の作業はできませんか?
回答:
回答№1の場合は7実際には、上記のコメントのおかげで、外観のプロキシは次のように動作するはずです。
[[UINavigationBar appearance] setTintColor:[UIColor whiteColor]];
これをviewDidLoadメソッドに入れてABPeoplePickerViewを起動するコントローラを表示します。これはMFMailerViewでも同様に機能します。 私のコードを正しくスタイルするために使用しているコードは、次のとおりです。
[[UINavigationBar appearance] setTintColor:[UIColor whiteColor]];
NSDictionary *attributes = [NSDictionary dictionaryWithObjectsAndKeys:[UIFont
fontWithName:@"Helvetica Neue" size:12], NSFontAttributeName,
[UIColor whiteColor], NSForegroundColorAttributeName, nil];
[[UINavigationBar appearance] setTitleTextAttributes:attributes];
回答№2については2
ABPeoplePickerNavigationController *picker = [[ABPeoplePickerNavigationController alloc] init];
[[UIBarButtonItem appearanceWhenContainedIn:[ABPeoplePickerNavigationController class], nil] setTintColor:[UIColor whiteColor]];
[[UINavigationBar appearanceWhenContainedIn:[ABPeoplePickerNavigationController class], nil] setTintColor:[UIColor whiteColor]];
[[UINavigationBar appearanceWhenContainedIn:[ABPeoplePickerNavigationController class], nil] setBarTintColor:[UIColor redColor]];
[picker.navigationController.navigationBar setTranslucent:NO];
私はviewdidloadにいなくても、ピッカーを提示する前にこれらのメソッドを呼び出します。
回答№3の場合は1
色の問題: ナビゲーションバーは、アクセスしようとしている時点ではロードされないことがあります。 ABPeoplePickerNavigationControllerを提示した後で、色のプロパティを設定しようとしましたか?
非表示の問題:通常、NavigationBarを非表示にするには:
- (void)setNavigationBarHidden:(BOOL)hidden animated:(BOOL)animated;
あなたのケースでは、UINavigationControllerのABPeoplePickerNavigationControllerにあります。
乾杯、ファビアン
回答№4の場合は1
あなたはインスタンス変数(iVar)を使用しています。 _peoplePicker
これは明らかに不動産に属しています peoplePicker
。さらに、メソッドがあります peoplePicker
クラスのオブジェクトを返す ABPeoplePickerNavigationController *
.
あなたの IBAction
addressBookButtonClicked:
あなたは命令を実行する
[self presentViewController:self.peoplePicker animated:YES completion:nil];
つまり、メソッドを呼び出す peoplePicker
、これはiVarをチェックします _peoplePicker
それが設定されている場合は色合いなどの色を設定します nil
値。
しかし、iVarを直接使用しているので、 _peoplePicker
の代わりに self.peoplePicker
あなたはセッターメソッドを使用せず、単純に割り当てを行います。
これは、 UIColor
あなたが作成するオブジェクト [UIColor blackColor]
保持カウントが1の命令は命令では増加しません _peoplePicker.navigationBar.tintColor = [UIColor blackColor];
それが返されたときにオートリリースプールに入れられます return _peoplePicker;
。しかし、あなたがアプリがメインイベントループに戻ると、オートリリープールが流出し、 UIColor
オブジェクトが解放されます。
だから私はあなたがすべての課題を _peoplePicker
割当によって self.peoplePicker
。次に、セッターメソッドを使用して、保持カウントを増加させます。 UIColor
オブジェクトは生き残ります。