swift - 执行操作时(包括委托和协议),一部分不起作用
问题描述
我有一个名为“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)
并获得 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!)
}
推荐阅读
- java - 如何在一段时间后自动更改设备壁纸?
- servicestack - 如何确保我们的业务服务使用与 servicestack-service 相同的数据库连接
- sql - SQL Server:按 2 列排序(首先获取 ColumnX > Null,然后 Id > 按 DESC 排序)
- bash - 如何在匹配之前 grep 特定模式?
- javascript - 抓取附加到 div 元素的 css 属性
- concurrency - Celery 仅使用 20% 的 Cpu(峰值)
- javascript - useState 对象集
- snowflake-cloud-data-platform - 如何将所有 Snowflake 数据库(包括未来)的使用权授予角色?
- javascript - 正确答案后带来正确信息
- python-3.x - `__reduce__` 和 `__reduce_ex__` 是否只为模块 `pickle` 服务?