2012-04-26 117 views
2

我想顯示從UITabBarController iPhone通訊錄中的聯繫人。我來到迄今: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 2012-04-26 23:15:18

+0

是的,我已經將這個UIViewController嵌入到故事板中的UITabBarController中。這個特殊的標籤欄被鏈接到沒有任何UITableViews的UIViewController。在我的設備上運行,我可以看到聯繫人。唯一的問題是沒有標籤,該死的取消按鈕和錯誤的風格。 – NCFUSN 2012-04-26 23:19:12

回答

1

我希望你現在明白了這一點,但這是因爲模態視圖控制器被添加到活動窗口的頂部。這就是爲什麼它會超越標籤欄的頂部。 UIViewController也有一個方法presentViewController:animated:completion:這可能會更好地爲你工作。如果使用modalTransitionStyle屬性爲動畫指定類型,則有一些動畫選項。祝你好運(如果它仍然是一個問題)。

+0

嗨。感謝您的回覆。我已經解決了這個問題。你的回答是對的。 – NCFUSN 2012-11-25 17:57:37

2

您將在tabBarController上呈現視圖控制器,這就是爲什麼tabBar被隱藏的原因。嘗試是這樣的:

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]; 

請記住,呈現一個UIViewController(子類)一個的TabBar控制器的下方,可能會導致一些非常奇怪的用戶體驗。此外,您必須將表視圖底部插入(與tabBar高度相同,通常爲49px)設置爲ABPeoplePickerNavigationController才能查看錶格的最後一個條目。

的ABPeoplePickerNavigationController具有的導航欄屬性,你可以改變它的色調的顏色(例如)黑色:

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

我懷疑你將能夠刪除取消按鈕,無需在應用程序的批准過程中被拒絕。此外,ABPeoplePickerNavigationController中沒有取消按鈕的屬性,因此您必須從例如掃描navigationBar子視圖。

+0

我沒有任何tableViews在這個選項卡,但uiview。 – NCFUSN 2012-04-26 23:21:14

+0

我只是讓它picker.navigationBarHidden = YES;無論如何,它確實只將酒吧的顏色改爲黑色。搜索控制器和其他人是默認着色的。 – NCFUSN 2012-04-26 23:28:44

+0

對不起,它不起作用。 – NCFUSN 2012-04-26 23:33:04