2

我正在尝试在 UITabBarController 中显示 iPhone 通讯录中的联系人。我来了这么远:

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

结果我得到了这个:

在此处输入图像描述

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

}

我得到了这个结果:

在此处输入图像描述

是的,联系人位于选项卡内,但现在有问题:

  1. 当我用联系人触摸 tableView 时,联系人完全消失了。
  2. 当我切换标签时,联系人视图不会消失,我可以在所有标签中看到它。
  3. UISearchbar 的一半保持隐藏。

现在邪恶在哪里?

4

2 回答 2

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(子类)可能会导致一些非常奇怪的用户体验。此外,您必须为 ABPeoplePickerNavigationController 设置一个表格视图底部插图(与 tabBar 相同的高度,通常为 49px),以便查看表格的最后一个条目。

ABPeoplePickerNavigationController 有一个 navigationBar 属性,您可以将它的色调更改为(例如)黑色:

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

我怀疑您是否能够删除取消按钮而不会在应用程序批准过程中被拒绝。此外,ABPeoplePickerNavigationController 中没有取消按钮的属性,因此您必须从例如浏览导航栏子视图中获取参考。

于 2012-04-26T23:17:11.787 回答
1

我希望你现在已经弄清楚了,但这是因为模态视图控制器被添加到活动窗口的顶部。这就是为什么它会越过标签栏的顶部。 UIViewController还有一种方法presentViewController:animated:completion:可能对您更有效。modalTransitionStyle如果您使用该属性指定动画的类型,则您有一些动画选项。祝你好运(如果它仍然是一个问题)。

于 2012-11-13T21:34:17.370 回答