를 작성할 수 없습니다 더 많은 코드입니다 직접.
그래서 테이블 뷰 항목을 가져 오기 위해 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)
}
}
을 올바른 인덱스 경로를지고의 문제를 줄일 수 iOS가 prepare()가 호출 될 때 iOS가 유효한 매개 변수를 제공한다고 가정 할 수 있습니까? 아니면 실제로 일어나지 않아야 할 상황을 항상 감시해야합니까? 위의 코드에서 guard 문에서 else 절을 어떻게 처리하는지 궁금합니다. 충돌과 같은 오류를 어떻게 다룰 수 있습니까? – ehmjaysee