2012-02-23 70 views
0

我对iOS开发非常新颖。所以,请尽可能准确和基本地做出回应。如何告诉地址簿选择器填写哪些字段?

我有一个有两个(此时 - 可能会有更多)的字段,每个字段旁边都会有一个按钮,允许用户从iPad地址簿中选择一个联系人并填写相关字段和地址簿中的姓氏。

Basic Form Mockup

The example code I have拉去,我可以在联系人姓名填点。不过,我希望能够点击推荐人旁边的“浏览联系人”按钮,并使用相同的功能填写名称。我看到getContactName函数具有sender参数。所以,我可以很容易地判断两个按钮(或其他人)中的哪一个被点击。

但是,当我从地址簿中选择,我怎么知道在PeoplePickerNavigationController或fillContactName函数中点击了哪个按钮?

- (IBAction)getContactName:(id)sender { 

    ABPeoplePickerNavigationController *picker = 
    [[ABPeoplePickerNavigationController alloc] init]; 
    picker.peoplePickerDelegate = self; 

    [self presentModalViewController:picker animated:YES]; 
} 


- (void)peoplePickerNavigationControllerDidCancel:(ABPeoplePickerNavigationController *)peoplePicker { 
     [self dismissModalViewControllerAnimated:YES]; 
} 

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

    [self fillContactName:person]; 

    [self dismissModalViewControllerAnimated:YES]; 

    return NO; 
} 

- (BOOL)peoplePickerNavigationController: 
(ABPeoplePickerNavigationController *)peoplePicker 
     shouldContinueAfterSelectingPerson:(ABRecordRef)person 
           property:(ABPropertyID)property 
           identifier:(ABMultiValueIdentifier)identifier 
{ 
    return NO; 
} 


- (void)fillContactName:(ABRecordRef)person 
{ 
    NSString* firstName = (__bridge_transfer NSString*)ABRecordCopyValue(person, 
                    kABPersonFirstNameProperty); 

    NSString *test = [firstName stringByAppendingString:@" "]; 

    NSString* lastName = (__bridge_transfer NSString*)ABRecordCopyValue(person, 
                     kABPersonLastNameProperty); 

    NSString *fullName = [test stringByAppendingString:lastName]; 

    self.contactName.text = fullName; 

} 
+1

在附注中,您确定不想使用“ABRecordCopyCompositeName()”函数而不是手动将姓和名放在一起吗? – 2012-06-20 19:15:16

回答

3

这里有一种方法可以做到这一点。

首先,分配你的“浏览联系人”按钮,独特的INT值的tag财产在创建时(或在故事板,如果你使用的是故事板),这样就可以区分它们在你的getContactName:方法。我建议为第一个按钮设置tag = 0,为第二个按钮设置tag = 1。

然后为您的ViewController类添加一个新属性,该按钮被单击后将存储指向目标文本字段的指针。 (请务必在您的m文件@synthesize)

@property (nonatomic, strong) UITextField *targetTextField; 

getContactName:,检查发件人对象,并使用其tag值来设置适当的指针。 (请注意,发件人将是用户单击的UIButton对象)。

- (IBAction)getContactName:(id)sender { 

    ... 

    switch(sender.tag) { 
     case 0: 
      self.targetTextField = self.contactName; 
      break; 
     case 1: 
      self.targetTextField = self.referredBy; 
      break; 
     default: 
      self.targetTextField = nil; 
    }   

    [self presentModalViewController:picker animated:YES]; 
} 

然后在fillContactName:,在您先前设置的targetTextField设置文本价值的文本字段。

- (void)fillContactName:(ABRecordRef)person 
{ 
    NSString* firstName = (__bridge_transfer NSString*)ABRecordCopyValue(person,kABPersonFirstNameProperty); 
    NSString* lastName = (__bridge_transfer NSString*)ABRecordCopyValue(person,kABPersonLastNameProperty); 

    self.targetTextField.text = [NSString stringWithFormat:@"%@ %@", firstName, lastName]; 
} 

请注意,我已经使用了NSString类方法stringWithFormat:让你的fillContactName代码更简洁。在这种情况下,这是一种常用的方法。

+0

工程就像一个魅力。谢谢。 – 2012-02-23 18:55:43

相关问题