【问题标题】:Detail Disclosure Indicator / prepareForSegue详细信息披露指标/prepareForSegue
【发布时间】:2021-08-20 17:41:55
【问题描述】:

我已经有一段时间没有做任何 iOS 编程了,所以请原谅我这个简单的问题。我已经搜索过了,也许我只是在想这个。

我有一个名为 ShowStreamDetails 的 segue,将动态原型单元格连接到一个详细视图,该视图显示...所选单元格的详细信息。现在我不知道细节披露按钮会很麻烦。如果我选择单元格,它会正常工作并将对象传递到详细视图。如果我按下详细信息披露指示器,它将转到详细信息视图,然后该视图显示列表中的第一项,而不是单元格中列出的实际项目。所以,这就是我所拥有的。

-(void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:   
(NSIndexPath *)indexPath
{
  [self performSegueWithIdentifier:@"ShowStreamDetails" sender:[self.tableView cellForRowAtIndexPath:indexPath]];
}

以及为转场做准备:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{
    if ([[segue identifier] isEqualToString:@"ShowStreamDetails"]) 
    {
        StreamsDetailViewController *detailViewController = [segue destinationViewController];

        detailViewController.streams = [self.dataController objectInListAtIndex:[self.tableView indexPathForSelectedRow].row];
    }
}

如何将它添加到 prepareForSegue: 以便它传递正确的信息?

【问题讨论】:

    标签: segue


    【解决方案1】:

    我刚刚遇到这个问题,并设法弄清楚 sender 参数是用于详细披露的 UITableView 单元格。

    所以只要做这样的事情:

    UITableViewCell* cell = (UITableViewCell*)sender;
    IndexPath* iPath = [self.tableView indexPathForCell: cell];
    

    【讨论】:

      【解决方案2】:

      @voidref 有正确的想法。

      问题是当用户点击详细信息披露按钮时,单元格没有被选中。所以-indexPathForSelectedRow 返回 nil,对于数组索引,它被视为零。

      相反,您希望找到其显示按钮触发了 segue 的单元格的索引路径。所以你的第二个代码块应该是这样的:

      - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
      {
          if ([[segue identifier] isEqualToString:@"ShowStreamDetails"]) 
          {
              StreamsDetailViewController *detailViewController = [segue destinationViewController];
      
              detailViewController.streams = [self.dataController objectInListAtIndex:[self.tableView indexPathForCell:sender].row];
          }
      }
      

      另外,与您的原始问题没有直接关系,但您不需要实现-tableView:accessoryButtonTappedForRowWithIndexPath:。相反,只需在情节提要中将原型单元格的附件类型设置为 Detail Disclosure,然后从原型单元格中的附件按钮控制/双指/右键拖动到详细视图控制器,然后将生成的 segue 命名为“ShowStreamDetails”。

      即使附件按钮可以说是“发送者”,sender 参数也会自动设置为表格视图单元格。

      【讨论】:

        【解决方案3】:

        Swift 版本:

        override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
            if let shooterController = segue.destination as? UIShooterViewController {
                if let cell = sender as? UITableViewCell, let indexPath = tableView.indexPath(for: cell) {
                    let matchShooter = fetchedResultsController.object(at: indexPath)
                    shooterController.setEntity(matchShooter.shooter, new: false)
                }
            }
        }
        

        Sender 包含点击了披露指示符的单元格。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2023-03-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-09-05
          • 1970-01-01
          相关资源
          最近更新 更多