【问题标题】:deselectRowAtIndexPath on an ABPeoplePickerNavigationController在 ABPeoplePickerNavigationController 上取消selectRowAtIndexPath
【发布时间】:2009-08-21 23:37:52
【问题描述】:

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

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

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

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

有什么想法吗?

【问题讨论】:

    标签: iphone row addressbook


    【解决方案1】:

    这就是我正在做的......而且它似乎工作得很好。当您选择/取消选择一个项目时,我还会添加一个复选标记附件。让我知道你的想法。谢谢:)

    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];
    }
    

    【讨论】:

      【解决方案2】:

      修改robby valles的回答,这就是我取消ABPeoplePickerNavigationController的tableview的方式:

      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];
      }
      

      希望这会有所帮助。

      【讨论】:

        【解决方案3】:

        在没有动画的情况下关闭人员选择器,然后在没有动画的情况下再次显示它。看起来不错。

        - (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person{
        
            [self dismissModalViewControllerAnimated:NO];
        
            [self presentModalViewController:peoplePicker animated:NO];
                return NO;
         }
        

        【讨论】:

        • 感谢您的建议。我的 peoplePicker 没有显示为模式 - 它是选项卡栏上的选项卡...所以不可能以这种方式将其关闭。
        猜你喜欢
        • 2021-01-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多