2012-02-23 4 views
0

私はiOS開発で非常に新しいです。ですから、できるだけ正確かつ基本的な回答をしてください。アドレス帳のピッカーに記入するフィールドを教えてください。

私は2つのフォームを持っています。(現時点ではもっと可能性があります)それぞれの横にボタンがあり、ユーザーがiPadのアドレス帳から連絡先を選択し、アドレス帳からの最後の名前。

Basic Form Mockup

The example code I haveは、私が連絡先の名前を記入することができますポイントに私を得ました。しかし、私はReferred Byの隣にある 'Browse Contacts'ボタンをクリックして、同じ関数を使用して参照先の名前を記入するようにしたいと考えています。 getContactName関数にはsenderパラメータがあることがわかります。だから、2つのボタンのうちのどれがクリックされたのかを後で知ることができました。

しかし、私がアドレス帳から選択すると、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()"関数を使用したくないのですか? –

答えて

3

これはあなたがそれを行う方法の1つです。

tagプロパティを作成するとき(またはストーリーボードを使用している場合はストーリーボードに)tagプロパティの[連絡先の参照]ボタンの一意なint値を割り当てて、getContactName:メソッドで区別できるようにします。最初のボタンにtag = 0を設定し、2番目のボタンにtag = 1を設定することをお勧めします。

次に、ボタンをクリックした後にターゲットテキストフィールドへのポインタを格納する新しいプロパティをViewControllerクラスに追加します。送信者オブジェクトを点検し、適切にポインタを設定するために、そのtag値を使用し、getContactName:

@property (nonatomic, strong) UITextField *targetTextField; 

(自分の.mファイルに@synthesizeしてください)。 (送信者は、ユーザーがクリックしたUIButtonオブジェクトになります)。

fillContactName:で次に
- (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]; 
} 

は、以前に設定したtargetTextFieldのテキストフィールドにテキスト値を設定します。私はあなたのfillContactNameコードをより簡潔にするためにNSStringクラスメソッドstringWithFormat:を使用している

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

注意。これは、このような場合によく使用される方法です。

+0

魅力的な作品です。ありがとうございました。 –

関連する問題