我在我的应用中显示了一个ABPeoplePickerNavigationController作为标签。用户点击名称,然后点击电子邮件地址,然后我使用电子邮件地址。
之后,我希望他们选择的人和财产淡出(不突出显示)。
在普通表中,我将调用deselectRowAtIndexPath。但是使用ABPeoplePickerNavCont我似乎无法访问它的表,也不知道选择了什么indexPath,也没有用于取消选择该行的API。
在大多数应用程序中,ABPeoplePickerNavCont是以模态方式使用的,所以行仍然被突出显示并不重要,因为整个事情都被解雇了。但在我的应用程序中,它不会被解雇(就像电话应用程序中的联系人选项卡一样)。
有什么想法吗?
答案 0 :(得分:10)
这就是我正在做的......它似乎完美无缺。当您选择/取消选择项目时,我也会添加一个复选标记附件。让我知道你的想法。谢谢:))
UIView *view = peoplePicker.topViewController.view;
UITableView *tableView = nil;
for(UIView *uv in view.subviews)
{
if([uv isKindOfClass:[UITableView class]])
{
tableView = (UITableView*)uv;
break;
}
}
if(tableView != nil)
{
UITableViewCell *cell = [tableView cellForRowAtIndexPath:[tableView indexPathForSelectedRow]];
cell.accessoryType = cell.accessoryType == UITableViewCellAccessoryNone ? UITableViewCellAccessoryCheckmark : UITableViewCellAccessoryNone;
[cell setSelected:NO animated:YES];
}
答案 1 :(得分:4)
修改robby valles的回答,这是我取消选择ABPeoplePickerNavigationController
的表格视图的方式:
UIView *view = peoplePicker.topViewController.view;
UITableView *tableView = nil;
for(UIView *uv in view.subviews)
{
if([uv isKindOfClass:[UITableView class]])
{
tableView = (UITableView*)uv;
break;
}
}
if(tableView != nil)
{
UITableViewCell *cell = [tableView cellForRowAtIndexPath:[tableView indexPathForSelectedRow]];
cell.accessoryType = cell.accessoryType == UITableViewCellAccessoryNone ? UITableViewCellAccessoryCheckmark : UITableViewCellAccessoryNone;
[tableView deselectRowAtIndexPath:[tableView indexPathForSelectedRow] animated:YES];
}
希望这有帮助。
答案 2 :(得分:3)
在没有动画的情况下关闭peoplepicker,然后在没有动画的情况下再次显示它。它看起来不错。
- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person{
[self dismissModalViewControllerAnimated:NO];
[self presentModalViewController:peoplePicker animated:NO];
return NO;
}