Обновление UITextField с контактной информацией, выбранной из контактов iPhone - PullRequest
1 голос
/ 25 ноября 2011

После вызова PeoplePicker и выбора записи в Контактах я не могу получить выбранную контактную информацию для отображения в моем представлении.Следуя Руководству по программированию адресной книги Apple для iOS, я отображаю средство выбора людей модально и делаю выбор.В примерах кода Apple информация отображается в UILabels, а я, поскольку я также позволяю пользователю вручную вводить информацию в текстовые поля в том же контроллере представления, должна отображать эту информацию в UITextFields.Я доказал, что выбранные данные попадают в целевой UITextField (который называется «contactName») при печати на консоль.Проблема в том, что выбранные данные не отображаются в представлении.Когда пользователь вводит данные вручную, проблем нет.Я просто не могу понять, как перенести данные из адресной книги в UITextFields в контроллере представления.

Я пытался в течение нескольких дней, но не могу решить эту проблему.Я, наверное, пропускаю что-то очень простое.Я новичок в этом, поэтому любая помощь будет оценена.

- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person
{

   // NSString* name = (NSString *)ABRecordCopyValue(person,kABPersonFirstNameProperty);
    NSString *name = [NSString stringWithFormat:@"%@ %@",ABRecordCopyValue(person,kABPersonFirstNameProperty), ABRecordCopyValue(person,kABPersonLastNameProperty)];

    self.contactName.text = name;   // 11/17/11

    NSLog(@"%@", name);
    // [name release];  Commenting out this code prevents the app from freezing when a name is selected from the picker.  11/25/11
    NSLog(@"%@",self.contactName.text);                // 11/17/11

    // 11/16/11 add additional contact info here

    [self dismissModalViewControllerAnimated:YES];
    return NO;
}

Ответы [ 2 ]

0 голосов
/ 28 февраля 2013

Начиная с iOS 6, [self dismissModalViewControllerAnimated] устарела.Если вы попробуете это, ваш код будет работать.

[self dismissViewControllerAnimated:YES completion:^(void) {
NSString *name = [NSString stringWithFormat:@"%@", ABRecordCopyValue(person, kABPersonFirstNameProperty)];
contactName.text=name;
}];
0 голосов
/ 28 ноября 2011
-(IBAction)addToAddressbook:(id)sender{
    NSString *fname=@"firstname";
    NSString *lname=@"lastname";
    NSArray *arrayAdd=[[NSArray alloc]initWithObjects:@"street Name",@"city Name",@"country code",@"zip",nil];
    UIImage *image=[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"ambani.png" ofType:nil]];
    [self addContact:fname:lname:arrayAdd:image];
}

-(void) addContact:(NSString *)firstname:(NSString *)lastname:(NSArray *)arrayAddress:(UIImage *)currentImage
{
    ABAddressBookRef addressBook=ABAddressBookCreate();
    ABRecordRef person=ABPersonCreate();
    //set Image
    NSData * dataRef = UIImagePNGRepresentation(currentImage);
    ABPersonSetImageData(person, (CFDataRef)dataRef, nil);
    //set FirstName and LastName
    ABRecordSetValue(person, kABPersonFirstNameProperty,firstname, nil);
    ABRecordSetValue(person, kABPersonLastNameProperty,lastname, nil);
    //Add Address
    ABMutableMultiValueRef address=ABMultiValueCreateMutable(kABMultiDictionaryPropertyType);
    NSMutableDictionary *addressDictionary=[[NSMutableDictionary alloc]init];
    [addressDictionary setObject:[arrayAddress objectAtIndex:0] forKey:(NSString *)kABPersonAddressStreetKey];
    [addressDictionary setObject:[arrayAddress objectAtIndex:1]forKey:(NSString *)kABPersonAddressCityKey];
    [addressDictionary setObject:[arrayAddress objectAtIndex:2] forKey:(NSString *)kABPersonAddressCountryCodeKey];
    [addressDictionary setObject:[arrayAddress objectAtIndex:3] forKey:(NSString *)kABPersonAddressCountryKey];
    ABMultiValueAddValueAndLabel(address, addressDictionary, kABHomeLabel, nil);
    ABRecordSetValue(person, kABPersonAddressProperty, address, nil);
    ABAddressBookAddRecord(addressBook,person, nil);
    ABAddressBookSave(addressBook,nil); 
    objABPersonViewController=[[ABUnknownPersonViewController alloc]init];
    objABPersonViewController.displayedPerson=person;
    [self.navigationController pushViewController:objABPersonViewController animated:YES];
    CFRelease(person);
}

-(void) validateAndDisplayContacts
{
    if([firstName length]==0)
    {
        firstName=@" ";
    }
    lblName.text=[NSString stringWithFormat:@"%@ : %@",@"First Name",name];
    [firstName release];
    if([mobile length]==0)
    {
        mobile=@" ";
    }
    lblPhone.text=[NSString stringWithFormat:@"%@ : %@",@"Mobile",mobile];
    [mobile release];

    if([email length]==0)
    {
    email=@" ";
    }
    lblEmail.text=[NSString stringWithFormat:@"%@ : %@",@"Email",email];
    [email release];
}


- (void)unknownPersonViewController:(ABUnknownPersonViewController *) unknownCardViewController didResolveToPerson:(ABRecordRef)person
{
    [objABPersonViewController dismissModalViewControllerAnimated:YES];
}
...