详细信息披露指标/ prepareForSegue

时间:2012-08-14 20:30:18

标签: segue detail disclosure

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

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

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

和segue的准备:

- (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:以便传递正确的信息?

3 个答案:

答案 0 :(得分:1)

我刚遇到这个问题,并设法确定sender参数是详细信息披露的UITableView单元格。

所以做这样的事情:

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

答案 1 :(得分:1)

@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参数也会自动设置为表格视图单元格。

答案 2 :(得分:0)

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)
        }
    }
}

发件人包含点击披露指标的单元格。