ios – 设置UISwitch是以编程方式从IBAction再次调用IBAction

ios – 设置UISwitch是以编程方式从IBAction再次调用IBAction,第1张

概述我只是注意到在其IBAction中设置UISwitch的isOn会导致再次调用IBAction.所以下面的代码: class ViewController: UIViewController { var count = 0 @IBOutlet weak var mySwitch: UISwitch! override func viewDidAppear(_ animat 我只是注意到在其IBAction中设置UISwitch的isOn会导致再次调用IBAction.所以下面的代码:

class VIEwController: UIVIEwController {    var count = 0    @IBOutlet weak var mySwitch: UISwitch!    overrIDe func vIEwDIDAppear(_ animated: Bool) {        super.vIEwDIDAppear(animated)        mySwitch.isOn = false    }    @IBAction func buttonTapped(_ sender: UIbutton) {        mySwitch.isOn = !mySwitch.isOn    }    @IBAction func switchChanged(_ sender: UISwitch) {        print("\(count) pre: \(mySwitch.isOn)")        mySwitch.isOn = !mySwitch.isOn        print("\(count) post: \(mySwitch.isOn)")        count += 1    }}

打开开关一次时打印以下内容:

0 pre: true0 post: false1 pre: false1 post: true

>在vIEwDIDLoad中关闭开关
>用户打开开关
>当调用switchChanged(IBAction)时,开关打开
> 0 pre:打印为true
> switchChanged中以编程方式关闭开关
> 0 post:false打印
>系统再次调用switchChanged
>现在在switchChanged中关闭开关,并调用1 pre:false
>以编程方式打开开关
> 1帖子:真印刷

为什么系统第二次调用IBAction?例如,当想要根据某些内部状态否定用户的行为时,如何解决这个问题呢?我觉得我错过了一些令人尴尬的东西,但我很确定类似的代码曾经工作过.这是iOS错误吗?它运行在iOS 10.2 iPhone 5s模拟器上,Xcode Version 8.2.1(8C1002)

有趣的是,当点击与buttonTapped绑定的按钮(调用相同的方法)时,不会调用开关的IBAction.

解决方法 您的IBAction可能与valueChanged挂钩,这并不表示特定的触摸事件,正如它所说的那样,值已被更改.

我建议设置一个名为var dIDOverrIDeSwitchValue = false的变量,在设置新的switch值之前将其设置为true,然后在调用该函数时,检查该变量.如果设置为true,则将其设置为false并返回.

或者,如果您希望仅在打开时取消新设置,那么您可以执行if(switch.isOn),然后如果是,那么您可以通过关闭它来响应它,如果需要的话.

总结

以上是内存溢出为你收集整理的ios – 设置UISwitch是以编程方式从IBAction再次调用IBAction全部内容,希望文章能够帮你解决ios – 设置UISwitch是以编程方式从IBAction再次调用IBAction所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/1002285.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-22
下一篇2022-05-22

发表评论

登录后才能评论

评论列表(0条)

    保存