gpt4 book ai didi

ios - 在 Swift 中,您如何检测哪些 UIControlEvents 触发了操作?

转载 作者:搜寻专家 更新时间:2023-10-31 22:15:19 25 4
gpt4 key购买 nike

我目前有 4 个 UITextField 的

@IBOutlet weak var fNameTextField: UITextField!
@IBOutlet weak var lNameTextField: UITextField!
@IBOutlet weak var emailTextField: UITextField!
@IBOutlet weak var phoneTextField: UITextField!

我想跟踪他们的各种事件:

[UIControlEvents.EditingChanged, UIControlEvents.EditingDidBegin, UIControlEvents.EditingDidEnd ]

但我不想有 3 个独立的事件处理程序,所以我创建了一个这样的函数。这个函数很好地告诉我哪个 UITextField 触发了一个事件,但它没有告诉我触发了哪个事件。:

fNameTextField.addTarget(self, action: "onChangeTextField:", forControlEvents: UIControlEvents.AllTouchEvents)
lNameTextField.addTarget(self, action: "onChangeTextField:", forControlEvents: UIControlEvents.AllTouchEvents)
emailTextField.addTarget(self, action: "onChangeTextField:", forControlEvents: UIControlEvents.AllTouchEvents)
phoneTextField.addTarget(self, action: "onChangeTextField:", forControlEvents: UIControlEvents.AllTouchEvents)

func onChangeTextField(sender:UITextField){
switch(sender){
case fNameTextField:
print("First Name")
case lNameTextField:
print("Last Name")
case emailTextField:
print("E-mail")
case phoneTextField:
print("Phone")
default: break
}
}

如何打印发件人姓名和触发事件的名称(例如:.EditingDidEnd、.EditingDidEnd、.EditingDidEnd)?

理想情况下,我不想编写多个事件处理程序,我更喜欢一个函数。

像这样:

func onChangeTextField(sender:UITextField){
switch(sender.eventTriggerd){
case UIControlEvents.EditingChanged:
println("EditingChanged")
case UIControlEvents.EditingDidBegin:
println("EditingDidBegin")
case UIControlEvents.EditingDidEnd:
println("EditingDidEnd")
default: break
}
}

最佳答案

不幸的是,您无法区分哪个控制事件触发了 Action 处理程序。这与 Swift 无关;这只是 Cocoa 的一个特性。

这是一个奇怪的设计决定,但事实就是如此。参见,例如,my book ,提示它:

Curiously, none of the action selector parameters provide any way to learn which control event triggered the current action selector call! Thus, for example, to distinguish a Touch Up Inside control event from a Touch Up Outside control event, their corresponding target–action pairs must specify two different action handlers; if you dispatch them to the same action handler, that handler cannot discover which control event occurred.

关于ios - 在 Swift 中,您如何检测哪些 UIControlEvents 触发了操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31122418/

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