我想在segue中调整弹窗视图的大小。该popover工作,但处于错误的位置。Swift 3 indexPathForSelectedRow - 获取空路径
要设置位置,我使用下面的代码试图选择当前的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
}
}
}
路径返回零。谢谢你的帮助。
更新:我在cellAtRow中设置单元格。这里是该片段:
case 2: //notes
cell.detailPickerButton.isHidden = false
cell.detailPickerButton.isEnabled = true
cell.detailPickerButton.addTarget(self, action: #selector(detailsViewController.showNotesPanel(_:)), for: UIControlEvents.touchUpInside)
....
我不重写didSelectRow。我是不是该?
我希望你是不是叫deselectRowAtIndexPath在你的didSelectRowAtIndexPath错误。这将使indexPathForSelectedRow无。 –
不,我不是。我没有调用'didSelectRow'。我在'cellForRow'中添加目标调用 –
你的意思是你的目标调用在cellForRow中是什么意思?我希望你打算在用户选择特定的行时显示弹出窗口,并且你会收到didSelectRowAtIndePath方法调用。 –