- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
以下代码在 iOS7 中可以正常工作,但在 iOS8 中不能正常工作(变量 recordID
设置正确):
CFErrorRef error = nil;
const ABAddressBookRef addressBook = (ABAddressBookCreateWithOptions (NULL, &error));
ABRecordRef contactRef = ABAddressBookGetPersonWithRecordID (addressBook, recordID);
ABPersonViewController *personViewController = [[ABPersonViewController alloc] init];
personViewController.addressBook = addressBook;
personViewController.displayedPerson = contactRef;
CFRelease(addressBook);
NSArray *displayedProperties = @[@(kABPersonFirstNameProperty),
@(kABPersonLastNameProperty),
@(kABPersonMiddleNameProperty),
@(kABPersonPrefixProperty),
@(kABPersonSuffixProperty),
@(kABPersonOrganizationProperty),
@(kABPersonJobTitleProperty),
@(kABPersonDepartmentProperty),
@(kABPersonEmailProperty),
@(kABPersonBirthdayProperty),
@(kABPersonKindProperty),
@(kABPersonAddressProperty),
@(kABPersonPhoneProperty),
@(kABPersonInstantMessageProperty),
@(kABPersonURLProperty),
@(kABPersonSocialProfileProperty),
@(kABPersonNoteProperty)];
personViewController.displayedProperties = displayedProperties;
personViewController.navigationItem.title = NSLocalizedString(@"CONTACT_DETAILS", nil);
personViewController.allowsActions = YES;
personViewController.allowsEditing = YES; // if NO, no back button is shown
personViewController.personViewDelegate = self;
personViewController.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@"ADDRESSES",nil) style:UIBarButtonItemStylePlain target:self action:@selector(personviewDoneButtonPressed:)];
UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:personViewController];
[self presentViewController:navigationController animated:YES completion:nil];
iOS8 中的错误:
allowsEditing
设置为 YES
时,显示联系人,但只显示名称。导航栏左侧显示后退按钮(名为“地址”),右侧显示编辑按钮。当。。。的时候按下编辑按钮,显示所有字段的联系人除名称外为空,编辑按钮显示为完成按钮。如果在没有任何编辑的情况下按下此完成按钮,显示有关联系人的所有信息。allowsEditing
设置为 NO
时,不显示后退按钮,因此屏幕不能再离开。有人有解决方法吗?
更新:
我现在意识到,虽然总是在我的设备上,问题 1 只是有时发生在模拟器上>。
最佳答案
montuno(再次感谢)评论了我的第一个答案,从苹果技术支持那里得到了如何解决第一个问题的提示,我现在也明白了第二个问题:
1)只显示部分联系人:
Apple 声称以下代码是错误的:
ABRecordRef contactRef = ABAddressBookGetPersonWithRecordID (addressBook, recordID);
ABPersonViewController *personViewController = [[ABPersonViewController alloc] init];
personViewController.addressBook = addressBook;
personViewController.displayedPerson = contactRef;
CFRelease(addressBook);
此处 addressBook
在分配给 ABPersonViewController
后被错误地释放了。
在我的原始代码中,我没有 CFRelease
语句。但随后静态分析器警告称“地址簿中存储的对象可能发生泄漏”。在我插入 release 语句后,构建在没有警告的情况下成功,所以我假设 personViewController
保留了 addressBook
,显然不是这种情况,至少在 iOS8 中不是这样。我现在再次删除了发布声明,收到了警告,但一切正常。
2) 缺少后退按钮:ABPersonViewController
的文档说“重要人物 View Controller 必须与导航 Controller 一起使用才能正常运行。”
所以我做了以下事情:
我设置了一个 ABPersonViewController
,为其 navigationItem.backBarButtonItem
分配了一个“Done”按钮,并初始化了一个新的 UINavigationController
使用 personViewController
,使用 initWithRootViewController:
。然后我以模态方式展示了新的 navigationController
。
显示带有后退按钮的 personViewController
,当按下时,呈现 View Controller 关闭模态呈现的导航 Controller 。
这在 iOS < 8 上运行良好,但在 iOS8 中,当 allowsEditing
设置为 NO
时,后退按钮不显示。
但这显然不是 Apple 希望显示 personViewController
的方式:
我认为 Apple 假设 navigationController
已经存在,并呈现当前 View ,因此新的 personViewController
只是被插入 navigationController
的堆栈>。在这种情况下,personViewController
不是 navigationController
的 rootViewController
,navigationController
会自动显示一个后退按钮(rootViewController
没有这样做)。如果以这种方式实现,一切也适用于 iOS8。
关于iOS8 漏洞 : ABPersonViewController does not display properties & back button,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26117245/
这个问题已经被问到了,但还没有得到解答。 (here) 我制作了一个 UIViewController,看起来像 ABPersonViewController View ,并添加了一些按钮。 我在右侧
我有一个选项卡栏应用程序,在第一个选项卡中我有一些按钮和一个表格 View ,其中填充了地址簿中的联系信息。当点击单元格的附件按钮时,我尝试使用 ABPersonViewController 作为模态
除了 ABPersonViewController 中的内置电子邮件、电话行之外,是否可以添加自定义 UITableViewCell 行?我想在该单元格中添加添加、删除等按钮,这将允许用户在我的应用程
任何人都可以帮助我在 ABPersonViewController 中启用删除按钮吗? 最佳答案 看一下 ABPersonViewController+Delete 类别,它不使用任何私有(priva
我的一个应用程序中发生了一件奇怪的事情。 我在 UINavigationController 中呈现一个 ABPersonViewController。 代码非常简单: ABAddressBookRe
我是 Objective-C 的新手,所以如果我遗漏了一些你认为很明显的东西,我提前道歉 :) 我写了一个简单的程序来显示地址簿,并选择一个用户(模仿 iOS 联系人列表)。 我有一个基本的 Cont
ABPersonViewController 未在可编辑模式下打开。当我使用断点时,控制不会到达委托(delegate)方法。哪里有问题?这是我的代码: - (void)tableView:(UITa
在我正在编写的应用程序中,我允许用户将联系人与事件相关联。他们可以使用地址簿 UI 框架添加新的或现有的联系人。 联系人一旦关联,就会显示出来,用户可以单击它们以显示ABPersonViewContr
无法获取有关本地化 ABPersonViewController 的任何信息... 我在 iPod 上使用俄语,但当我调用 ABPersonViewController 时,它总是以英语显示。我检查了
我想将 ABPersonViewController 显示为模式,而不是将其推送到导航堆栈上。我已经完成了这个工作,但为了保持完成按钮存在,我必须使用 NSTimer 每 0.25 秒添加一次按钮,因
出于某种原因,ABPersonViewController不愿意显示除名称之外的任何属性,无论设置了哪些属性来显示。 我无法使用 AddressBookUI Controller 让用户选择要显示的联
根据 Apple 的快速联系人示例代码使用 ABPersonViewController。 ABRecordRef person = (ABRecordRef)[people objectAtInde
设置:我正在寻找有关在不从地址簿获取数据的情况下使用 ABPersonViewContoller 的见解。我有一个提供表格 View 的 JSON Web 服务,我将我的个人对象作为字典存储在 mut
我创建了一个 ABPersonViewController 并添加了一个完成按钮: ABRecordRef rec = ABAddressBookGetPersonWithRecordID(addrB
-(void) vDisplayPerson:(ABRecordRef)person { ABPersonViewController *picker = [[ABPersonViewCont
我正在实现 - (BOOL)personViewController:(ABPersonViewController *)personViewController shouldPerformDefau
我正在尝试设置我的应用程序,以便当从 ABPeoplePickerNavigationController 中打开特定联系人时,在 ABPersonViewController 中,右上角有一个编辑按
我正在尝试实现 func personViewController(personViewController: ABPersonViewController!, shouldPerformDefaul
ABRecordRef addressBookRecord = ...; ABNewPersonViewController *newPersonViewController = [[[ABNewPe
我正在开发地址簿应用程序。当用户从联系人列表中选择用户时,我想使用 ABPersonViewController 在编辑模式下直接打开该记录,而不是单击 ABPersonViewController
我是一名优秀的程序员,十分优秀!