2012-04-26 4 views
2

iPhoneの連絡先ブックからの連絡先をUITabBarControllerに表示しようとしています。私はこれまで来た:iPhone:ABPeoplePickerNavigationControllerがUITabBarControllerに正しく表示されない

- (void)contacts 
{ 
ABPeoplePickerNavigationController *picker = [[ABPeoplePickerNavigationController alloc] init]; 
// place the delegate of the picker to the controller 
picker.peoplePickerDelegate = self; 

CGRect newFrame = self.tabBarController.view.frame; 
newFrame.size.height = newFrame.size.height - 49; 
picker.view.frame = newFrame; 
[picker setAccessibilityViewIsModal:YES]; 
// showing the picker 
[self.tabBarController presentModalViewController:picker animated:NO]; 
} 

呼び出し:

結果
-(void)viewWillAppear:(BOOL)animated 
{ 
    [self contacts]; 
} 

私はこの取得しています:

enter image description here

  1. 私はタブを見ることができないが
  2. 私のタブのスタイルは黒ですが、ピッカーは青です。
  3. キャンセルボタンがあります。

タブを見えるようにする方法、スタイルを黒くしてキャンセルボタンを削除する方法はありますか?

ありがとうございます。

編集:私はこの結果を持って

-(void)contacts 
{ 
    ABPeoplePickerNavigationController *picker = [[ABPeoplePickerNavigationController alloc] init]; 
picker.peoplePickerDelegate = self; 
picker.navigationBar.tintColor=[UIColor blackColor]; 
// Display only a person's phone, email, and birthdate 
NSArray *displayedItems = [NSArray arrayWithObjects:[NSNumber numberWithInt:kABPersonPhoneProperty], nil]; 
picker.displayedProperties = displayedItems; 
// Show the picker 
picker.navigationBar.hidden=YES; 
CGRect newFrame = picker.view.frame; 
newFrame.size.height = newFrame.size.height - 49; 
picker.view.frame = newFrame; 

[self.tabBarController.view addSubview:picker.view]; 

} 

enter image description here

はい接点がタブの内側に座っているのが、今持っている

方法を変更した後、問題:

  1. 私は連絡先でtableViewをタッチすると、連絡先がまったく消えています。
  2. タブを切り替えると、連絡先の表示が消えず、すべてのタブで表示されます。
  3. UISearchbarの半分は非表示のままです。

ここで悪はどこですか?

+0

こんにちは。このビューコントローラをストーリーボードのタブバーコントローラに埋め込みましたか?テーブルビューのデリゲートとデータソースメソッドはどのように見えるのですか? – geraldWilliam

+0

はい、私はこのUIViewControllerをstoryboardのUITabBarControllerに埋め込んでいます。この特定のタブバーは、UITableViewsを持たないUIViewControllerに連鎖しています。私のデバイス上で実行して、連絡先を見ることができます。唯一の問題は、タブがありません、キャンセルボタンとスタイルが間違っていることです。 – NCFUSN

答えて

1

私は、あなたが今これを理解したいと思っていますが、モーダルビューコントローラがアクティブウィンドウの上部に追加されているためです。それがあなたのタブバーの上にある理由です。 UIViewControllerには、presentViewController:animated:completion:という方法がありますが、これはおそらくあなたにとってうまくいくでしょう。 modalTransitionStyleプロパティを使用してアニメーションのタイプを指定すると、いくつかのアニメーションオプションがあります。幸運にも(たとえ依然として質問であれば)。

+0

こんにちは。返信ありがとう。私はすでにこの問題を解決しました。あなたの答えは正しい。 – NCFUSN

2

tabBarControllerの上にビューコントローラを表示しているため、tabBarが非表示になっています。いくつかの本当に奇妙なユーザーエクスペリエンスにつながる可能性があるタブバーコントローラの下のUIViewController(サブクラス)を提示し、覚えておいてください

UIViewController *controller = [tabBarController.viewControllers objectAtIndex:0]; // Let's assume this is the desired view controller that should display the ABPeoplePickerNavigationController 
[controller presentModalViewController:picker animated:NO]; 

:ような何かを試してみてください。さらに、テーブルの最後のエントリを表示するには、ABPeoplePickerNavigationControllerにテーブルビューの下部のインセット(tabbarと同じ高さ、通常は49ピクセル)を設定する必要があります。

ABPeoplePickerNavigationController *picker = [[ABPeoplePickerNavigationController alloc] init]; 
picker.navigationBar.tintColor = [UIColor blackColor]; 

私はあなたがアプリの承認プロセスで拒否されずにキャンセルボタンを削除することはできないだろう:

ABPeoplePickerNavigationControllerがnavigationBarプロパティを持っている、あなたはそれが(例えば)黒の色合いの色です変更することができます。さらに、ABPeoplePickerNavigationController内のキャンセルボタンのプロパティはありません。そのため、たとえばからの参照を取得する必要があります。 navigationBarのサブビューをスキャンします。

+0

このタブにはtableViewsはありませんが、uiviewです。 – NCFUSN

+0

私はそれをpicker.navigationBarHidden = YESにしました。とにかく、バーの色だけを黒に変えました。検索コントローラと他のユーザーはデフォルトの色合いになっています。 – NCFUSN

+0

申し訳ありません申し訳ありませんが動作しません。 – NCFUSN

関連する問題