2012-04-26 118 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