gpt4 book ai didi

ios - 我如何告诉地址簿选择器要填写哪些字段?

转载 作者:行者123 更新时间:2023-11-28 20:38:52 24 4
gpt4 key购买 nike

我是 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;

}

最佳答案

这是您可以做到的一种方法。

首先,在创建“浏览联系人”按钮时(或在 Storyboard中,如果您使用的是 Storyboard)为它们的 tag 属性分配唯一的 int 值,以便您可以区分它们您的 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 代码更加简洁。这是这种情况下常用的方法。

关于ios - 我如何告诉地址簿选择器要填写哪些字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9417578/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com