2012-01-21 16 views
7

का उपयोग करके ABPeoplePickerNavigationController प्रदर्शित करें मेरे पास एक नई प्रोजेक्ट है जहां मैं एक बटन पिकर प्रदर्शित करना चाहता हूं, जब कोई बटन स्पर्श होता है।स्टोरीबोर्ड सेग्यू

तो मेरे पास UIButton है जो पहचानकर्ता showContacts के साथ एक सामान्य UIViewController पर segues है। मैंने इस व्यू कंट्रोलर की कक्षा ABPeoplePickerNavigationController पर सेट की है।

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

हालांकि मैं परिणाम मेरे सिम्युलेटर पता पुस्तिका के लिए परीक्षण संपर्कों को शामिल किया है इस तरह दिखता है:

no picker http://i.minus.com/jbwUQyLr36ChHo.png

अब मेरी जड़ ViewController में मैं अपने पिकर को प्रारंभ करने के लिए इस कोड है

निम्न कोड के साथ, जो prepareForSegue: विधि में मैं करता हूं उससे बहुत समान है, मैं IBAction:

0 के माध्यम से एक पिकर दिखाने का प्रबंधन करता हूं।
- (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]; 
} 

परिणाम:

picker http://i.minus.com/jeEVeIBmfIYdR.png

यह क्यों लोग पिकर प्रदर्शित नहीं करता है मेरे लिए स्पष्ट नहीं है।

उत्तर

3

उत्सुकता से मैंने Can I use segues with designated initializers of view controllers? पर सुझाव दिया कि मेरे लिए भी इस मुद्दे को ठीक किया गया है। तो ABPeoplePickerNavigationController फिक्स के लिए एक प्रॉक्सी ViewController मुद्दा बनाने, लेकिन यह स्पष्ट नहीं होता, क्यों निर्मित वालों स्टोरीबोर्ड में उपयोग नहीं किया जा सकता है:

#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]; 
} 
:

यह मेरा आवरण वर्ग के लिए कोड है

5

बेसी का जवाब बहुत अच्छा है। लेकिन यह कम कोड सिर्फ बजाय इसके लिए एक स्टोरीबोर्ड का उपयोग करने का पुराना तरीका उपयोग करने के लिए है:

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

के रूप में मैट विख्यात अच्छे पुराने तरीका ठीक है। यदि आप स्टोरीबोर्ड का उपयोग करना चाहते हैं तो आप अपने अनुकूलित दृश्य नियंत्रक में ABPeoplePickerNavigationController को इस तरह जोड़ सकते हैं:

- (void)awakeFromNib 
{  
    ABPeoplePickerNavigationController * peoplePicker = [[ABPeoplePickerNavigationController alloc] init]; 
    peoplePicker.peoplePickerDelegate = self; 
    // Display only a person's phone and address 
    NSArray * displayedItems = [NSArray arrayWithObjects:[NSNumber numberWithInt:kABPersonAddressProperty], 
          [NSNumber numberWithInt:kABPersonPhoneProperty], 
          nil]; 

    peoplePicker.displayedProperties = displayedItems; 

    [self.view addSubview:peoplePicker.view]; 
    [self addChildViewController:peoplePicker]; 
    [peoplePicker didMoveToParentViewController:self];  
} 
संबंधित मुद्दे