如何识别调用了哪个点击手势识别器?
Posted
技术标签:
【中文标题】如何识别调用了哪个点击手势识别器?【英文标题】:how to identify which tap gesture recognizer is called? 【发布时间】:2018-01-15 09:50:39 【问题描述】:我有 2 个 UIImageView,分别命名为“artistImage”和“albumImage”,每个都包含 1 个点击手势,所有手势都连接到 1 个名为“artistImageTap”的 @IBAction。这些点击手势是从对象库中拖动并放置在我的 ImageView 上。
故事板 - 代码
我的应用程序有一个艺术家、专辑和歌曲列表,当点击一首歌曲时,应用程序会移动到此视图并显示其详细信息。如果我单击添加按钮,应用程序将移动到此视图,但这次所有文本字段都是可编辑的,图像是默认的,用户可以点击它们从库中选择图像以创建新歌曲。
我的问题是我不知道如何识别哪个 UIImageView 被点击。正如你在图片中看到的,我尝试了 picker.restorationIdentifier 但它总是返回 nil。
@IBAction func artistImageTap(_ sender: UITapGestureRecognizer)
let imagePickerController = UIImagePickerController()
// Only allow photos to be picked, not taken.
imagePickerController.sourceType = .photoLibrary
// Make sure ViewController is notified when the user picks an image.
imagePickerController.delegate = self
present(imagePickerController, animated: true, completion: nil)
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any])
// The info dictionary may contain multiple representations of the image. You want to use the original.
guard let selectedImage = info[UIImagePickerControllerOriginalImage] as? UIImage else
fatalError("Expected a dictionary containing an image, but was provided the following: \(info)")
// Set photoImageView to display the selected image.
if picker.restorationIdentifier == "artistImage"
artistImage.image = selectedImage
else
albumImage.image = selectedImage
// Dismiss the picker.
dismiss(animated: true, completion: nil)
感谢每一个帮助!
【问题讨论】:
没有人知道您是如何创建手势识别器的。 使用sender.view
并在你的UIImageView
中设置一个tag
,之后你可以使用sender.view.tag
作为标识符
@ElTomato 我通过从对象库中拖动来添加它们。抱歉没有提及!
@ReinierMelian 我尝试为我的视图、滚动视图、内容视图甚至 ImageView 设置标签,但是当我使用 sender.view.tag 时它们都没有出现
使用debugPrint(sender.view)
告诉我@hell2809 打印的内容
【参考方案1】:
从情节提要向两个 UIImageView 添加标签。 比如artistImage = 1001 和albumImage = 1002
@IBAction func artistImageTap(_ sender: UITapGestureRecognizer)
if sender.view?.tag == 1001
selectedTag = 1001
else if sender.view?.tag == 1002
selectedTag = 1002
let imagePickerController = UIImagePickerController()
// Only allow photos to be picked, not taken.
imagePickerController.sourceType = .photoLibrary
// Make sure ViewController is notified when the user picks an image.
imagePickerController.delegate = self
present(imagePickerController, animated: true, completion: nil)
将选定的标签存储在一个变量中。
现在您可以使用selectedTag
变量检查用户点击了哪些图像
【讨论】:
@hell2809 毫无疑问,这个问题很有帮助。但玩标签是不好的做法。所以不要像创建 IBAction 那样创建 Tap Gesture 对象的创建 IBOutlet。并将 IBOutlet 与sender
对象进行比较以更清楚:)【参考方案2】:
在图像上应用时,首先为点击手势设置标签。
tapGestureArtistImage.tag = 0;
tapGestureAlbumImage.tag = 1;
然后在artistImageTap
方法中将点击手势作为参数发送
- (void) artistImageTap:(UITapGestureRecognizer*)sender
if(sender.tag == 0)
// artistImage tapped
else if (sender.tag == 1)
// albumImage tapped
【讨论】:
找到了我的方式,和你的一样!谢谢!以上是关于如何识别调用了哪个点击手势识别器?的主要内容,如果未能解决你的问题,请参考以下文章