【问题标题】:NSIndexPath of UITableViewCell subview?UITableViewCell子视图的NSIndexPath?
【发布时间】:2011-12-07 00:30:17
【问题描述】:

有没有办法获取 UITableViewCell 的 contentView 子视图的 NSIndexPath?

就我而言,我有一个表格视图,其中每一行都分为 3 个按钮。我可以使用按钮标签来跟踪它是哪一列,但我还需要知道它是表视图的哪一行(当用户点击按钮时)。

因为按钮阻塞了整个实际的表视图行,所以从不调用 didSelectRowAtIndexPath(这是预期的),所以我不能那样做。

我只尝试了 [thisButton superview],但这似乎不起作用。有什么想法吗?

【问题讨论】:

    标签: objective-c ios uitableview uibutton


    【解决方案1】:

    我假设按钮正在将其UIControlEventTouchUpInside 事件消息发送到您的视图控制器?然后你可以这样做:

    - (void)buttonPressed:(UIButton *)button
    {
        CGPoint location = [button.superview convertPoint:button.center toView:self.tableView];
        NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:location];
        [self doSomethingWithRowAtIndexPath:indexPath];
    }
    

    【讨论】:

    • 这个答案实际上比我想要的更多,更优雅。
    • 如果您选择这样做,也不受插入/删除/重新排列行的影响。
    • 嗯.. 它似乎不适用于我的第三列按钮。它正在正确转换触摸位置,但在 indexPathForRowAtPoint 上,它为第三列中的每个按钮返回 0(尽管适用于前两列)。会不会和风景有关系?
    • 对不起,我从错误的坐标空间转换。因为我使用的是按钮center,所以我应该从它的superview 坐标空间进行转换。我已经更新了代码 sn-p。
    【解决方案2】:

    一个可能的选项是在为索引路径制作单元格时,您可以将标签指定为3 * row_number + <the tag number>。然后将标签除以 3 得到行,%3 得到按钮。

    【讨论】:

      【解决方案3】:

      你不需要调用 button.superview。您可以直接从树中的任何子视图直接转到表格视图

      目标-C

      - (NSIndexPath *)indexPathForCellContainingView:(UIView *)view inTableView:(UITableView *)tableView {
          CGPoint viewCenterRelativeToTableview = [tableView convertPoint:CGPointMake(CGRectGetMidX(view.bounds), CGRectGetMidY(view.bounds)) fromView:view];
          NSIndexPath *cellIndexPath = [tableView indexPathForRowAtPoint:viewCenterRelativeToTableview];
          return cellIndexPath
      }
      

      斯威夫特

      func indexPathForCellContainingView(view: UIView, inTableView tableView:UITableView) -> NSIndexPath? {
          let viewCenterRelativeToTableview = tableView.convertPoint(CGPointMake(CGRectGetMidX(view.bounds), CGRectGetMidY(view.bounds)), fromView:view)
          return tableView.indexPathForRowAtPoint(viewCenterRelativeToTableview)
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-11
        相关资源
        最近更新 更多