我对iOS开发非常新。因此,请尽可能准确和基本地回复您的回复。
我有一个表单,其中包含两个(目前可能还有更多)字段,每个字段旁边都有一个按钮,允许用户从iPad地址簿中选择一个联系人,并用第一个和第一个填写相关字段。地址簿中的姓氏。
The example code I have让我知道我可以填写联系人姓名。但是,我希望能够单击Referred By旁边的“浏览联系人”按钮,并让它使用相同的功能来填写引用的名称。我看到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;
}
答案 0 :(得分:3)
这是你可以做到的一种方式。
首先,在创建tag
属性时,为其getContactName:
属性分配“浏览联系人”按钮唯一的int值(如果您使用的是故事板,则在故事板中),以便您可以在{{@property (nonatomic, strong) UITextField *targetTextField;
中区分它们。 1}}方法。我建议为第一个按钮设置tag = 0,为第二个按钮设置tag = 1.
然后向ViewController类添加一个新属性,该属性将在单击按钮后存储指向目标文本字段的指针。 (务必在.m文件中使用@synthesize)
getContactName:
在tag
中,检查sender对象并使用其- (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];
}
值来适当地设置指针。 (请注意,发件人将是用户单击的UIButton对象。)
fillContactName:
然后在- (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];
}
中,将文本值设置为您之前设置的targetTextField的文本字段。
NSString
请注意,我使用了stringWithFormat:
类方法{{1}}来使fillContactName代码更简洁。在这种情况下,这是一种常用的方法。