我有一个名为"customerInformationTableViewCell"的自定义单元格类。我在这个单元格中有一个文本字段。我创建了一个操作,该操作在编辑完成后打开。我创建了一个协议和委托来与我的视图控制器共享信息。但是防护(包含(之后的代码似乎不起作用,因为 print("2"( 不起作用。问题出在哪里?请帮忙!
@IBAction func textField(_ sender: UITextField) {
print("1")
guard let cell = sender.superview as? customerInformationTableViewCell else { return }
print("2")
let indexPath = (sender.superview?.superview as! UITableView).indexPath(for: cell)
self.delegate?.shareDetailsInvoice(row: indexPath!.row, input: textField.text!)
}
一种解决方法是使用此扩展
import UIKit
extension UIView {
func lookForSuperviewOfType<T: UIView>(type: T.Type) -> T? {
guard let view = self.superview as? T else {
return self.superview?.lookForSuperviewOfType(type: type)
}
return view
}
}
如何使用它
let cell = sender.lookForSuperviewOfType(type: customerInformationTableViewCell.self)
并获取表格视图
let tableView = sender.lookForSuperviewOfType(type: UITableView.self)
所以你的函数会变成这样
@IBAction func textField(_ sender: UITextField) {
print("1")
guard let cell = sender.lookForSuperviewOfType(type: customerInformationTableViewCell.self) else { return }
print("2")
let indexPath = sender.lookForSuperviewOfType(type: UITableView.self)?.indexPath(for: cell)
self.delegate?.shareDetailsInvoice(row: indexPath!.row, input: textField.text!)
}