SWIFT 从 VC 向 UIView 传递参数让我抓狂
SWIFT passing parameter from VC to UIView drives me nuts
从昨天开始,我一直在努力完成这项工作,但没有任何方法成功。虽然我学到了很多东西,但似乎仍然缺少一些基础知识。
我有一个视图控制器,它应该在堆栈中包含多个子视图。每个子视图应在单独的 swift 文件中使用相同的 UIView class。但是,对于每个子视图,我想将位置 ID 传递给 UIView class。控制器和子视图是使用故事板创建的。
所以我最新最好的方法是
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")
}
}
但这似乎与 运行 代码相去甚远。使用 upper UIView 定义,我收到错误 Fatal error: init(coder:) has not been implemented in the console and 属性 'self.subviewName' 未在 super.init 编辑器内联调用 处初始化。两者都与
有关super.init(coder: aDecoder)
我在这里查找了有关此错误消息的其他帖子,但 none 我看到了帮助。非常感谢任何帮助:-)
尽量让它成为可选的
var subviewName: String?
如果你将它们作为出口,那么你不应该在这里分配一个新实例
SpatialProblemView(subviewName: "red")
只需分配 属性
redSquare.subviewName = "red"