这可能看起来有点过度设计,但我的表格视图在单元格中有按钮和/或允许直接选择单元格。
所以我创建了 UIView 扩展方法来获取表格视图的东西。
extension UIView {
var superTableViewCell: UITableViewCell? {
if let cell = self as? UITableViewCell {
return cell
}
return superview?.superTableViewCell
}
var superTableView: UITableView? {
if let tableView = self as? UITableView {
return tableView
}
return superview?.superTableView
}
var indexPathOfSuperTableViewCell: IndexPath? {
if let tableView = superTableView, let cell = superTableViewCell {
return tableView.indexPath(for: cell)
}
return nil
}
}
这让我减少了获取正确索引路径的问题
private func _segueIndexPath(for view: UIView?) -> IndexPath? {
if let indexPath = view?.indexPathOfSuperTableViewCell {
return indexPath
}
return tableView.indexPathForSelectedRow
}
最后,
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
switch segue.identifier ?? "" {
case "TheCorrectSegue":
guard let indexPath = _segueIndexPath(for: sender as? UIView) else {
// Handle error
return
}
// prepare for the segue.
default:
super.prepare(for: segue, sender: sender)
}
}