Bes*_*esi 7 cocoa objective-c abpeoplepickerview ios uistoryboard
我有一个新项目,我想在触摸按钮时显示人员选择器.
所以我有一个带有标识符UIButton
的泛型.我将此ViewController的类设置为.UIViewController
showContacts
ABPeoplePickerNavigationController
现在在我的根ViewController中我有这个代码来初始化我的选择器:
#pragma mark - Segues
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
if([segue.identifier isEqualToString:@"showContacts"]){
ABPeoplePickerNavigationController *ppnc = segue.destinationViewController;
ppnc.peoplePickerDelegate = self;
ppnc.addressBook = ABAddressBookCreate();
ppnc.displayedProperties = [NSArray arrayWithObject:[NSNumber numberWithInt:kABPersonPhoneProperty]];
}
}
Run Code Online (Sandbox Code Playgroud)
虽然我已将测试联系人添加到我的模拟器地址簿中,但结果如下所示:
没有选择器http://i.minus.com/jbwUQyLr36ChH.png
使用以下代码,这与我在prepareForSegue:
方法中的操作非常相似,我设法通过以下代码显示选择器IBAction
:
- (IBAction)showPicker:(id)sender {
ABPeoplePickerNavigationController *picker = [[ABPeoplePickerNavigationController alloc] init];
picker.peoplePickerDelegate = self;
NSArray *displayedItems = [NSArray arrayWithObjects:[NSNumber numberWithInt:kABPersonPhoneProperty],
[NSNumber numberWithInt:kABPersonEmailProperty],
[NSNumber numberWithInt:kABPersonBirthdayProperty], nil];
picker.displayedProperties = displayedItems;
// Show the picker
[self presentModalViewController:picker animated:YES];
}
Run Code Online (Sandbox Code Playgroud)
结果:
选择器http://i.minus.com/jeEVeIBmfIYdR.png
我不清楚为什么人物选择器没有显示.
贝西的答案很棒.但是使用旧方法而不是使用故事板来代替它的代码更少:
- (void)showPeoplePicker:(id)sender
{
ABPeoplePickerNavigationController* picker = [[ABPeoplePickerNavigationController alloc] init];
picker.peoplePickerDelegate = self;
picker.modalPresentationStyle = UIModalPresentationFullScreen;
picker.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentViewController:picker
animated:YES
completion:^{
// animation to show view controller has completed.
}];
}
Run Code Online (Sandbox Code Playgroud)
奇怪的是我在Can I use Segues with Designed Initializers of View Controller? 上提出的建议是什么?也为我解决了这个问题。因此,为解决问题创建代理 ViewController ABPeoplePickerNavigationController
,但它没有解释为什么内置选择器不能在故事板中使用:
这是我的包装类的代码:
#import "PeoplePickerViewControllerWrapper.h"
@implementation PeoplePickerViewControllerWrapper
@synthesize ppvc = _ppvc; // This is the object I'm proxying (The proxyee so to speak)
@synthesize delegate = _delegate;
- (void)awakeFromNib
{
self.ppvc = [[ABPeoplePickerNavigationController alloc] init ];
self.ppvc.peoplePickerDelegate = self;
self.ppvc.addressBook = ABAddressBookCreate();
self.ppvc.displayedProperties = [NSArray arrayWithObject:[NSNumber numberWithInt:kABPersonPhoneProperty]];
}
#pragma mark - View lifecycle
- (void)loadView
{
[super loadView];
[self.ppvc loadView];
}
- (void)viewDidLoad
{
[super viewDidLoad];
[self.ppvc viewDidLoad];
}
-(void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
[self.ppvc viewWillAppear:animated];
}
-(void)viewDidDisappear:(BOOL)animated{
[super viewDidDisappear:animated];
[self.ppvc viewDidDisappear:animated];
}
-(UIView *)view{
return self.ppvc.view;
}
- (void)viewDidUnload
{
[super viewDidUnload];
[self.ppvc viewDidUnload];
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4332 次 |
最近记录: |