在我的故事板中,我有一些“启用用户交互”的图像。在UIViewController
我覆盖该touchesEnded
功能。
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
super.touchesEnded(touches, with: event)
}
我是否可以获取在此功能中单击的图像的名称?我宁愿不要@IBOutlet
图像。
在我的故事板中,我有一些“启用用户交互”的图像。在UIViewController
我覆盖该touchesEnded
功能。
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
super.touchesEnded(touches, with: event)
}
我是否可以获取在此功能中单击的图像的名称?我宁愿不要@IBOutlet
图像。
我相当肯定这不可能完全像你想要的那样。图像视图不保留它们加载图像的文件,只保留图像数据本身。但我假设您在 IB 中设置图像名称并尝试在触摸事件后获取该名称,在这种情况下,您可以在元素的恢复 ID 中设置图像名称并通过触摸元素的 restoreIdentifier 属性检索名称。
你可以像这样得到被触摸的元素:
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
if let touch: UITouch = touches.first {
let location = touch.location(in: self.view)
let touchedView = self.view.hitTest(location, with: event)
print(touchedView.restorationIdentifier)
}
}
请注意,如果要这样做,则必须设置两次图像文件名,并在进行更改时更改两次值。你正在尝试的东西带有糟糕设计的味道,所以如果有另一种方式,我会选择。
如果我的问题正确,你不想使用@IBOutlet
,但需要点击图片的名称。因此,为此您还可以tag
识别UIImageView
它们,然后可以访问任何信息。
首先从情节提要中,将1
任何 int 值分配给tag
属性并User Interaction Enabled
检查ImageView
.
用以下几行替换 touchesEnded -
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
if let touch: UITouch = touches.first {
let location = touch.location(in: self.view)
if let touchedView = self.view.hitTest(location, with: event) as? UIImageView {
if touchedView.tag == 1 {
debugPrint(touchedView.image)
}
}
}
}
希望能帮助到你。