ABPeoplePickerNavigationController фактически выполняется - PullRequest
2 голосов
/ 04 января 2011

У меня есть список контактов, который отлично отображается в симуляторе.он берет номер телефона и помещает его в текстовое поле.поэтому я решил попробовать его на своем iphone, и он фактически выполняет то, на что я нажимаю.он вызывает номер вместо того, чтобы вводить номер в текстовое поле.вот код:

- (IBAction) adressBook: (id) sender {
 // creating the picker
 ABPeoplePickerNavigationController *picker = [[ABPeoplePickerNavigationController alloc] init];
 // place the delegate of the picker to the controll
 picker.peoplePickerDelegate = self;

 // showing the picker
 [self presentModalViewController:picker animated:YES];
 // releasing
 [picker release];
}


- (void)peoplePickerNavigationControllerDidCancel:(ABPeoplePickerNavigationController *)peoplePicker {
    // assigning control back to the main controller
 [self dismissModalViewControllerAnimated:YES];
}
- (BOOL)peoplePickerNavigationController: (ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person {

 /* 
 ABMultiValueRef multi = ABRecordCopyValue(person, kABPersonPhoneProperty);
 num.text = (NSString*)ABMultiValueCopyValueAtIndex(multi, 0);


    //[self dismissModalViewControllerAnimated:YES];
 */
    return YES;
}

- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier{
 NSLog(@"inbool");
 ABMultiValueRef phonePro = ABRecordCopyValue(person, property);
 int idx = ABMultiValueGetIndexForIdentifier(phonePro, identifier);
 num.text = (NSString*)ABMultiValueCopyValueAtIndex(phonePro, idx);


 [self dismissModalViewControllerAnimated:YES];
 /*
 ABMultiValueRef multi = ABRecordCopyValue(person, property);
 num.text = (NSString*)ABMultiValueCopyValueAtIndex(multi, identifier);
 */


 return YES;
}

и извините, если не отформатирован правильно, новинка в stackoverflow.

1 Ответ

5 голосов
/ 04 января 2011

Ваш peoplePickerNavigationController:shouldContinueAfterSelectingPerson:property:identifier: должен вернуть NO, чтобы телефон не выполнял действия по умолчанию.Затем вы закрываете сборщик самостоятельно.

-(BOOL) peoplePickerNavigationController: (ABPeoplePickerNavigationController *) peoplePicker 
      shouldContinueAfterSelectingPerson: (ABRecordRef) person 
                                property: (ABPropertyID) property 
                              identifier: (ABMultiValueIdentifier) identifier
{
    NSLog(@"inbool"); 
    ABMultiValueRef phonePro = ABRecordCopyValue(person, property); 
    int idx = ABMultiValueGetIndexForIdentifier(phonePro, identifier); 
    num.text = (NSString)ABMultiValueCopyValueAtIndex(phonePro, idx);                             

    [peoplePicker dismissModalViewControllerAnimated: YES];

    return NO;  
}
...