- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我刚刚注意到在其 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: true
0 post: false
1 pre: false
1 post: true
viewDidLoad
中关闭switchChanged
(IBAction) 时开关现在打开0 pre: true
被打印switchChanged
中以编程方式关闭0 post: false
被打印switchChanged
被系统再次调用switchChanged
中关闭,并且 1 pre: false
被调用1 post: true
被打印为什么IBAction会被系统第二次调用?例如,当想要根据某些内部状态否定用户的操作时,如何解决这个问题?我觉得我遗漏了一些非常明显的东西,但我很确定曾经使用过类似的代码。这是iOS错误吗?它在 iOS 10.2 iPhone 5s 模拟器、Xcode 版本 8.2.1 (8C1002) 上运行
有趣的是,当点击绑定(bind)到 buttonTapped
的按钮时(调用相同的方法),开关的 IBAction 不会被调用。
最佳答案
您的 IBAction 可能连接到 valueChanged
,这并不表示特定的触摸事件,只是它所说的那样,值已更改。
我建议设置一个名为 var didOverrideSwitchValue = false
的变量,在设置新开关值之前将其设置为 true
,然后在调用该函数时,检查该变量。如果它设置为 true
,则将其设置为 false
并返回。
或者,如果您希望仅在新设置打开时取消它,那么您可以执行 if (switch.isOn)
,然后如果是这样,您可以通过打开它来响应它如果需要,关闭。
关于ios - 从 IBAction 以编程方式设置 UISwitch isOn 再次调用 IBAction,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42589407/
我正在编写 PostGres check 以将文本字段限制为 4 个不同值之一。我有意避免使用 Enum 类型,因为众所周知它会导致问题。 我似乎有更多的“包含”而不是必须是其中之一。 ALTER T
所以我有一个奇怪的。 我目前在 App Store 中有一个 list 应用程序。今天,一位用户在使用 UISwitch 时报告了奇怪的行为。 如下所示,这是 Storyboard 中的一个简单开关,
我刚刚注意到在其 IBAction 中设置 UISwitch 的 isOn 会导致再次调用 IBAction。所以下面的代码: class ViewController: UIViewControll
这是我最近在采访中被问到的一个问题。我想出了一个不错的解决方案,但面试官告诉我还有更好的解决方案。 假设有 n 个灯泡(或您选择的任何二进制东西..),最初它们都熄灭了。设计一种方法来以理想的时间和空
我是一名优秀的程序员,十分优秀!