Swift 3 indexPathForSelectedRow - 获取空路径

时间:2017-07-23 16:34:20

标签: ios swift uitableview

我正在尝试在segue中调整popover视图的大小。 popover有效,但处于错误的位置。

要设置位置,我使用以下代码尝试选择当前的IndexPathForSelectedRow,然后设置弹出值。

它没有开火,我可以帮助找出原因。

我正在使用的代码如下:

 override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

        if segue.identifier == "RecordToNotes" {

            if let path = detailsTable.indexPathForSelectedRow {
                let cellFrame = detailsTable.rectForRow(at: path)

                let vc = segue.destination
                vc.preferredContentSize = CGSize(width: 400, height: 400)
                let controller = vc.popoverPresentationController
                controller?.delegate = self
                controller?.sourceView = detailsTable
                controller?.sourceRect = CGRect(x: cellFrame.midX + 50, y: cellFrame.midY, width: 0, height: 0)
                controller?.permittedArrowDirections = .right
            }

        }

    }

路径返回nil。谢谢你的帮助。

更新:我在cellAtRow中设置了单元格。这是片段:

case 2: //notes
                cell.detailPickerButton.isHidden = false
                cell.detailPickerButton.isEnabled = true

                cell.detailPickerButton.addTarget(self, action: #selector(detailsViewController.showNotesPanel(_:)), for: UIControlEvents.touchUpInside)
           ....

我没有压倒didSelectRow。我应该吗?

1 个答案:

答案 0 :(得分:1)

尝试将框架转换为ViewController.View坐标

使用此行

controller?.sourceRect = self.view.convert(cellFrame, from: detailsTable)

而不是

controller?.sourceRect = CGRect(x: cellFrame.midX + 50, y: cellFrame.midY, width: 0, height: 0)

希望这有帮助