自从我做了任何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:以便传递正确的信息?
答案 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)
}
}
}
发件人包含点击披露指标的单元格。