ios - SWIFT 将参数从 VC 传递到 UIView 让我抓狂
问题描述
从昨天开始,我一直在努力完成这项工作,但没有一种方法是成功的。虽然我学到了很多东西,但似乎仍然缺少一些基础知识。
我有一个视图控制器,它应在堆栈中包含几个子视图。每个子视图应在单独的 swift 文件中使用相同的 UIView 类。但是,对于每个子视图,我想将位置 ID 传递给 UIView 类。控制器和子视图是使用情节提要创建的。
所以我最新最好的方法是
class SpatialViewController: UIViewController {
@IBOutlet var redSquare: SpatialProblemView!
@IBOutlet var blueSquare: SpatialProblemView!
override func viewDidLoad() {
super.viewDidLoad()
redSquare = SpatialProblemView(subviewName: "red")
blueSquare = SpatialProblemView(subviewName: "blue")
// redSquare.subviewName = "red"
self.view.addSubview(redSquare)
}
}
和
class SpatialProblemView: UIView {
var subviewName: String
init(subviewName: String){
self.subviewName = subviewName
super.init(frame: CGRect.zero)
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
}
我也试过用这个对 UIView 进行编码
required init(subviewName: String) {
super.init(frame: .zero)
self.subviewName = subviewName
self.setup()
}
required override init(frame: CGRect) {
super.init(frame: frame)
self.setup()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.setup()
func setup() {
if subviewName == "red" {
print ("red")
}
}
但这似乎与正在运行的代码相去甚远。使用上面的UIView 定义,我收到错误Fatal error: init(coder:) has not been implemented in the console and Property 'self.subviewName' not initialized at super.init call inline 在编辑器中。两者都与
super.init(coder: aDecoder)
我已经在这里寻找其他带有此错误消息的帖子,但我看到的没有一个对我有帮助。非常感谢任何帮助:-)
解决方案
尝试使其成为可选
var subviewName: String?
如果你把它们作为插座,那么你不应该在这里分配一个新的实例
SpatialProblemView(subviewName: "red")
只需分配属性
redSquare.subviewName = "red"
推荐阅读
- android - “不能将测试根与非测试根混合”
- javascript - 任何人都可以查看我的代码并了解为什么我只能在 innerHTML 中获得 [objects MouseEvent] 吗?
- firebase - 图像未显示在 RecyclerView 中
- reference - UE4:跟踪场景中演员的消失
- oracle - ORA-01722: 无效数字 - oracle 中的类型问题
- scala - Spark中的scala匿名函数中的代码块是什么意思?
- outlook - Outlook 加载项:在更改事件时间时未触发 AppointmentTimeChanged 事件
- mysql - 基于字段批次比较相同字段A的存在性
- python - python上的“pywhatskit”不发送消息
- reactjs - 反应无限滚动组件表体