gpt4 book ai didi

ios - 无法让 UISwitch 约束工作 - swift 4

转载 作者:行者123 更新时间:2023-11-28 13:35:27 27 4
gpt4 key购买 nike

我正在尝试以编程方式创建一个 UISwitch,但出于某种原因,我无法获得任何约束。如果我不使用任何约束,则会在左上角创建 UISwitch。

我尝试通过在声明我的开关时添加约束来创建 UISwitch,这确实将开关移到了不同​​的地方。然而,这是一个问题,因为我希望它在我看来受到其他项目的约束。

class cameraController: UIViewController {

var switchOnOff: UISwitch {
let switchOnOff = UISwitch()
switchOnOff.isOn = false
switchOnOff.translatesAutoresizingMaskIntoConstraints = false
switchOnOff.addTarget(self, action: #selector(switchButton(_:)), for: .valueChanged)
return switchOnOff
}
}

extension cameraController{
@objc func switchButton(_ sender:UISwitch){
if (sender.isOn == true){
print("UISwitch state is now ON")
}
else{
print("UISwitch state is now Off")
}
}
}

extension cameraController {
private func setupLayouts() {

view.addSubview(switchOnOff)

switchOnOff.rightAnchor.constraint(equalTo: view.rightAnchor, constant: -20).isActive = true
switchOnOff.topAnchor.constraint(equalTo: photosButtonIcon.bottomAnchor, constant: 20).isActive = true

}
}

我希望能够将开关的约束添加到我的 setupLayouts 扩展中,而不是在声明开关时。

运行上述代码时出现的错误是:

Thread 1: EXC_BAD_ACCESS (code=EXC_I386_GPFLT)

我在 setupLayouts 扩展的约束的第一行收到此错误。

任何帮助都会很棒。

最佳答案

你需要一个 lazy var 来让 self 在此 block 中,这是一个闭包,你当前的代码是一个计算属性,它为每个引用返回一个开关,并导致约束崩溃作为开关added to view 与你为 constraints 设置的不是同一个对象

lazy var switchOnOff: UISwitch = {
let switchOnOff = UISwitch()
switchOnOff.isOn = false
switchOnOff.translatesAutoresizingMaskIntoConstraints = false
switchOnOff.addTarget(self, action: #selector(switchButton(_:)), for: .valueChanged)
return switchOnOff
}()

然后在 viewDidLoad 中调用 setupLayouts ,顺便说一句,扩展与这个问题完全无关

关于ios - 无法让 UISwitch 约束工作 - swift 4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56693920/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com