我使用swift文件创建了一对xib文件(用于该xib文件)。 [xib_template.xib& view_template.swift] 我想通过我的[main_VC.swift]来控制这对xib文件。 xib文件有1个按钮和1个标签。 我点击此按钮时想要更改标签文本。
我想设置不同的模板视图并在我的[main_VC]中控制它们。 但@IBAction在课堂上似乎是独立的
我通过在互联网上搜索的init方法将值从[main_VC]传递给[view_template.swift]。 我可以通过在[main_VC]中使用func来获得正确的值。 但是当点击按钮时, 价值总是零。 IBAction中的var无法从init获取值。
我是swift的新手,我尽我所能,但仍无法解决这个问题。 如何在IBAction中获取init值? 或者我如何以编程方式创建&从[main_VC]中禁用Ibaction?
我调整了我的代码以便更容易阅读。 可能会有一些小错误。
我在线搜索并尝试了所有我已经可以。 有人问过类似的问题,但没有答案。 希望得到帮助。 非常感谢。
[view_template.swift]
import UIKit
class View_template_empty: UIView {
var _uid: String?
@IBOutlet weak var labellabel: UILabel!
init (uid: String) {
self._uid = uid
super.init(frame: CGRect(x: 0, y: 0, width: 100, height: 100))
}
required init?(coder aDecoder: NSCoder) {
// fatalError("init(coder:) has not been implemented")
super.init(coder: aDecoder)
}
@IBAction func clickingPanel2(_ sender: Any) {
print(self._uid) // always nil !!!!!!
self.labellabel.text = “test”
}
fun test () {
print(self._uid) // correct value
}
}
[main_VC](仅复制主要功能)
func allocator (_uid: String, uiView: UIView) {
switch templateType {
case “one”:
if let loading_panels = Bundle.main.loadNibNamed("xib_template", owner: uiView, options: nil)?.first as? view_template {
loading_panels.translatesAutoresizingMaskIntoConstraints = false
uiView.addSubview(loading_panels)
loading_panels.leadingAnchor.constraint(equalTo: uiView.leadingAnchor).isActive = true
loading_panels.trailingAnchor.constraint(equalTo: uiView.trailingAnchor).isActive = true
loading_panels.bottomAnchor.constraint(equalTo: uiView.bottomAnchor).isActive = true
loading_panels.topAnchor.constraint(equalTo: uiView.topAnchor).isActive = true
let view_temp = view_template(uid: _uid)
view_temp.test()
}
case “two”:
if let loading_panels = Bundle.main.loadNibNamed("xib_template_two”, owner: uiView, options: nil)?.first as? view_template_two {
loading_panels.translatesAutoresizingMaskIntoConstraints = false
uiView.addSubview(loading_panels)
loading_panels.leadingAnchor.constraint(equalTo: uiView.leadingAnchor).isActive = true
loading_panels.trailingAnchor.constraint(equalTo: uiView.trailingAnchor).isActive = true
loading_panels.bottomAnchor.constraint(equalTo: uiView.bottomAnchor).isActive = true
loading_panels.topAnchor.constraint(equalTo: uiView.topAnchor).isActive = true
}
default:
print("error")
}
答案 0 :(得分:1)
您在这里使用不同的初始值设定项:
let view_temp = view_template(uid: _uid)
时,会使用init (uid: String)
并且您的实施设置为_uid
,因此它不是零。init?(coder aDecoder: NSCoder)
,但未设置_uid
,因此它为零。要将_uid
注入模板,只需在两个loading_panels._uid = _uid
块中说出if let loading_panels = ...
。
您可能还想阅读Swift API设计指南中的“Follow case conventions”部分,以了解您的命名。