這似乎是有點過度工程,但我有過在小區按鈕和/或允許細胞被選中表格視圖直。
所以我創建了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)
}
}
思考我的問題後,我才發現更深層次的問題我是試圖問的是這樣的:我可以假定當prepare()被調用時,iOS會給我有效的參數,還是我總是需要防範應該永遠不會發生的情況?在上面的代碼中,我想知道你會在guard語句else子句中做什麼?除了崩潰之外,你會如何處理這樣的錯誤? – ehmjaysee