【问题标题】:IndexPath for segue from accessoryButton来自附件按钮的索引路径
【发布时间】:2012-03-09 12:07:28
【问题描述】:

我正在尝试使用情节提要/segue 来处理 UITableView 与标准转换和细节披露按钮之间的转换。在这里阅读了一些不同的帖子后,我以这种方式设置了我的项目:

  1. 在 UITableViewCell 和 ViewController 之间绑定 main segue
  2. 将辅助 segue 从父 ViewController 绑定到新 ViewController
  3. 如下实现accessoryButtonTappedForRowWithIndexPath

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

这很好用,我的prepareForSegue: sender: 会按预期被调用。问题是,我需要知道所选元素的 indexPath。来自 UITableViewCell 的 segue 像这样检索 indexPath:

NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];

不幸的是,当我尝试调用附件按钮时,它返回 null

我基于此代码的原始问题在这里:Detail Disclosure Button and Segues

tableView 是否有返回附件按钮的 indexPath 的方法?我需要以其他方式访问 indexPath 吗?

【问题讨论】:

    标签: iphone storyboard


    【解决方案1】:

    您不必覆盖accessoryButtonTappedForRowWithIndexPath

    prepareForSegue 中,使用详细信息披露按钮时,而不是:

    [self.tableView indexPathForSelectedRow]
    

    使用:

    [self.tableView indexPathForCell:sender]
    

    发件人已经是详细信息披露按钮的单元格。

    【讨论】:

    • 当我这样做的时候,发送者是我所在的 TableViewController。所以在 performSegue 中,我将单元格作为发送者传递
    • 我们如何在 Swift 3 中做到这一点?
    【解决方案2】:

    根据文档,sender 参数是:

    您要用于启动 segue 的对象。在实际转场期间,此对象可用于提供信息。

    我看不出有什么理由不能使用索引路径而不是self作为发件人,然后访问prepareForSegue:中的索引路径。

    如果这不起作用,请将索引路径存储在 ivar 中并在 prepareForSegue 中访问它

    【讨论】:

    • 作为发送者传递 indexPath 工作正常。一旦有人提到它,似乎很明显。谢谢。
    • 好主意,我很不安地认为我们可能需要一个局部变量来传递这些信息
    猜你喜欢
    • 1970-01-01
    • 2015-06-25
    • 2016-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-15
    • 1970-01-01
    相关资源
    最近更新 更多