5

我在我的应用程序中将 ABPeoplePickerNavigationController 显示为选项卡。用户单击名称,然后单击电子邮件地址,然后我对电子邮件地址进行操作。

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

在普通表中,我会调用 deselectRowAtIndexPath。但是对于 ABPeoplePickerNavCont,我似乎无法访问它的表,也不知道选择了什么 indexPath,也没有用于取消选择行的 api。

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

有任何想法吗?

4

3 回答 3

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];
}
于 2010-01-04T07:20:38.190 回答
4

修改 robby valles 的答案,这就是我取消选择 tableview 的方式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];
}

希望这可以帮助。

于 2012-02-08T20:46:42.523 回答
3

在没有动画的情况下关闭 peoplepicker,然后在没有动画的情况下再次呈现它。这看起来不错的样子。

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

    [self dismissModalViewControllerAnimated:NO];

    [self presentModalViewController:peoplePicker animated:NO];
        return NO;
 }
于 2009-10-01T19:01:22.223 回答