如何在 iOS 中找到目标的动作函数
How do I find the action function for a target in iOS
希望我能说清楚。我有按钮,我想知道它的 .touchDown 事件的目标是什么对象中的什么函数。 iOS 中的属性和函数可能正是我要找的,但我无法使它们工作。 属性 是:
self.allTargets
功能是:
self.actions(forTarget:, forControlEvent:)
我用这段代码打印了值:
print( self.allTargets )
print( self.actions(forTarget: self, forControlEvent: .touchDown) ?? "no targets")
print( self.actions(forTarget: Button_Test.ViewController , forControlEvent: .touchDown) ?? "no targets")
print( self.actions(forTarget: "ViewController", forControlEvent: .touchDown) ?? "no targets")
结果:
[AnyHashable(<Button_Test.ViewController: 0x7b293300>)]
no targets
no targets
no targets
我可以看到按钮有目标,但我无法获取功能。求助!
我想我有点理解你,我想你可能对按钮目标的事情有些困惑,所以我将解释以下内容,希望它能帮助你找到你想要的东西。
let button = UIButton()
button.addTarget(target: self, action: #selector(randomFunction) for: .touchInsideUp).
按钮添加的目标是它希望从中获取函数 "randomFunction" 的目标。
因此,如果您正在编写代码,比方说,MyViewController,然后将目标指定为 self,我们对 Button 说:"get the selector function from MyViewController"。
.touchInsideUp 是将触发Button 执行选择器中功能的事件,在本例中为"randomFunction"。但是为了让您知道在哪里可以找到该功能,这就是您需要设置 "target" 的原因。
现在,由于编译器知道它应该在什么时候执行一个函数(例如.touchInsideUp),并且它也知道它应该查看哪个控制器(MyViewController),所以它会在任何时候执行 MyViewController 中的 randomFunction()您对按钮执行 .touchInsideUp 操作。
希望对您有所帮助。
似乎目标 AnyHashable(<Button_Test.ViewController: 0x7b293300>)
被注册为执行一个或多个控制事件的动作,但假设 self
== Button_Test.ViewController
在内存地址 [=15] =], 只是没有注册特定的控制事件 .touchDown
UIButton
最常见的触发动作的控制事件是 .touchUpInside
。您是否尝试过指定该事件,例如:
print( self.actions(forTarget: self, forControlEvent: .touchUpInside))
另一种可能是self
不是注册的目标。如果您添加此行,控制台会说什么:
print(self)
self
的类型是Button_Test.ViewController
,地址是0x7b293300
?
请注意,您的第三个和第四个 print()
语句永远不会 return 有效结果,因为它们传递的目标与按钮上存在的实际目标不匹配(在一种情况只是 type Button_Test.ViewController
,另一种情况是字符串 "ViewController"
)。
要获取给定控制事件的所有 target/action
对(在本例中为 .touchDown
),您需要执行以下操作:
let targets = self.allTargets
for target in targets {
if let actions = self.actions(forTarget: target, forControlEvent: .touchDown) {
for action in actions {
print("taget: \(target) - \(action)")
}
}
}
基本上您需要遍历所有目标并获取给定事件的每个目标的操作列表。
希望我能说清楚。我有按钮,我想知道它的 .touchDown 事件的目标是什么对象中的什么函数。 iOS 中的属性和函数可能正是我要找的,但我无法使它们工作。 属性 是: self.allTargets 功能是: self.actions(forTarget:, forControlEvent:)
我用这段代码打印了值:
print( self.allTargets )
print( self.actions(forTarget: self, forControlEvent: .touchDown) ?? "no targets")
print( self.actions(forTarget: Button_Test.ViewController , forControlEvent: .touchDown) ?? "no targets")
print( self.actions(forTarget: "ViewController", forControlEvent: .touchDown) ?? "no targets")
结果:
[AnyHashable(<Button_Test.ViewController: 0x7b293300>)]
no targets
no targets
no targets
我可以看到按钮有目标,但我无法获取功能。求助!
我想我有点理解你,我想你可能对按钮目标的事情有些困惑,所以我将解释以下内容,希望它能帮助你找到你想要的东西。
let button = UIButton()
button.addTarget(target: self, action: #selector(randomFunction) for: .touchInsideUp).
按钮添加的目标是它希望从中获取函数 "randomFunction" 的目标。
因此,如果您正在编写代码,比方说,MyViewController,然后将目标指定为 self,我们对 Button 说:"get the selector function from MyViewController"。
.touchInsideUp 是将触发Button 执行选择器中功能的事件,在本例中为"randomFunction"。但是为了让您知道在哪里可以找到该功能,这就是您需要设置 "target" 的原因。
现在,由于编译器知道它应该在什么时候执行一个函数(例如.touchInsideUp),并且它也知道它应该查看哪个控制器(MyViewController),所以它会在任何时候执行 MyViewController 中的 randomFunction()您对按钮执行 .touchInsideUp 操作。
希望对您有所帮助。
似乎目标 AnyHashable(<Button_Test.ViewController: 0x7b293300>)
被注册为执行一个或多个控制事件的动作,但假设 self
== Button_Test.ViewController
在内存地址 [=15] =], 只是没有注册特定的控制事件 .touchDown
UIButton
最常见的触发动作的控制事件是 .touchUpInside
。您是否尝试过指定该事件,例如:
print( self.actions(forTarget: self, forControlEvent: .touchUpInside))
另一种可能是self
不是注册的目标。如果您添加此行,控制台会说什么:
print(self)
self
的类型是Button_Test.ViewController
,地址是0x7b293300
?
请注意,您的第三个和第四个 print()
语句永远不会 return 有效结果,因为它们传递的目标与按钮上存在的实际目标不匹配(在一种情况只是 type Button_Test.ViewController
,另一种情况是字符串 "ViewController"
)。
要获取给定控制事件的所有 target/action
对(在本例中为 .touchDown
),您需要执行以下操作:
let targets = self.allTargets
for target in targets {
if let actions = self.actions(forTarget: target, forControlEvent: .touchDown) {
for action in actions {
print("taget: \(target) - \(action)")
}
}
}
基本上您需要遍历所有目标并获取给定事件的每个目标的操作列表。