在ABPeoplePickerNavigationController上取消选择RowAtIndexPath

5 iphone row addressbook

我在我的应用程序中显示了一个ABPeoplePickerNavigationController作为选项卡.用户点击名称,然后点击电子邮件地址,然后我使用电子邮件地址执行某些操作.

之后,我希望他们选择的人和财产淡出(不突出显示).

在普通表中,我将调用deselectRowAtIndexPath.但是对于ABPeoplePickerNavCont,我似乎无法访问它的表,也不知道选择了哪个indexPath,也没有用于取消选择该行的API.

在大多数应用程序中,ABPeoplePickerNavCont是以模态方式使用的,因此行仍然被突出显示并不重要,因为整个事情都被解雇了.但在我的应用程序中,它不会被解雇(就像电话应用程序中的联系人选项卡一样).

有任何想法吗?

小智 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];
}
Run Code Online (Sandbox Code Playgroud)


小智 3

在没有动画的情况下关闭人员选择器,然后在没有动画的情况下再次呈现它。看上去不错。

- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person{

    [self dismissModalViewControllerAnimated:NO];

    [self presentModalViewController:peoplePicker animated:NO];
        return NO;
 }
Run Code Online (Sandbox Code Playgroud)