首页 > 解决方案 > 执行操作时(包括委托和协议),一部分不起作用

问题描述

我有一个名为“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!)
    }

标签: swift

解决方案


一种解决方法是使用此扩展

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)

并获得 TableView

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!)
    }

推荐阅读