2016-10-20 2 views
0

У меня есть набор из 12 UIImageViews в моей раскадровке, и, ради аргумента, я хочу, чтобы каждый из них печатал в журналы «Вы только что прослушивали изображение x», когда пользователь нажимает на него, где x - число обращенных изображений, от 1 до 12). Поэтому мне нужно определить, какое изображение используется, и делать что-то в зависимости от этой информации. Какой был бы лучший способ сделать это, в Swift 3?Как напечатать «image x tapped», когда пользователь нажимает на один из многих UIIмагов в контроллере просмотра? (Swift 3)

(я предполагаю, что 12 IBActions - убирайте их как кнопку с изображением на фоне - это действительно плохой код. Также они должны быть помещены на определенные позиции поверх фонового изображения, поэтому для этого нельзя использовать UICollectionView.) Спасибо

ответ

0

Прежде всего, я думаю, используя CollectionView лучший подход для достижения того, что вы хотите. Тем не менее, вам необходимо:

  • Установите userInteractionEnabled в true для всех ваших imageViews.
  • Set -sequential- tag для всех ваших изображенийПросмотр, например image1.tag = 1, image2.tag = 2 ... и так далее.
  • Реализовать метод, чтобы быть мишенью всех изображений выстукивая, он должен быть похож на это:

    func imageViewTapped(imageView: UIImageView) { print("You just tapped image (imageView.tag)") }

  • Создания -она одинарного кран жеста и назначить реализованный метод для его выбора:

let tapGesture = UITapGestureRecognizer(target: self, action: #selector(imageViewTapped))

  • Наконец, добавьте tapGesture для всех ваше изображение, например: image1.addGestureRecognizer (tapGesture), image2.addGestureRecognizer (tapGesture) ... и так далее.

Надеюсь, это поможет.

+0

Спасибо за ваш ответ - я попробовал, но ничего не происходит, когда я нажимаю на изображения.Я установил теги, userInteraction = yes и ссылаюсь на выходы из UIImages на TapGestureRecognizer в Storyboard. Когда я программно добавляю image1.addGestureRecognizer (tapGesture), image2.addGestureRecognizer (tapGesture) и т. Д., То он работает только на последнем, игнорируя предыдущие. Любые идеи, что может быть неправильным? Я нахожусь на начальном уровне с кодированием, поэтому может быть что-то простое. Я продолжу работать над этим - еще раз спасибо – Apneist

+0

Обновление, наконец, заставило его работать - единственный способ, которым он работал, - это, согласно вашему решению выше, НО, мне пришлось сделать отдельные экземпляры tapGestureRecognizer для каждого изображения. Если бы я сделал то же самое, что и в вашем решении, он только зарегистрировал последний, и кран распознавания работал только в последнем uiImageView, чтобы добавить к нему tapGesture. Так что я сделал что-то вроде этого: – Apneist

+0

пусть tapGestureFirst = UITapGestureRecognizer (цель: самостоятельная, действие: #selector (водопроводная)) пусть tapGestureTwo = UITapGestureRecognizer (цель: самость, действие: #selector (водопроводная)) – Apneist

0

Это не плохой код per se, но если вы сделали это именно так, или с жесты касания на каждом из ImageViews, вы, вероятно, захотите выделить эту часть логики.

Существуют и другие подходы/виды можно использовать для управления такого рода вещи лучше, особенно если это предполагается в масштабе, но с ограничениями это то, что я хотел бы предложить:

Либо добавить TapGestureRecognizers своим imageViews или сделать их кнопки, а затем соединить все свои действия следующим образом:

@IBAction func phoneWasPressed(sender: AnyObject) { 
    guard let tappedImageView = sender as? UIImageView else { 
     return 
    } 

    switch tappedImageView { 
    case imageView1: 
     //do something 
    case imageView2: 
     // do something else 
    //etc. 
    default: 
     break 
    } 
    switch sender 
} 
+0

Благодарим за ответ - как я могу связать действия нескольких TapGestureRecognizers с IBaction, на которые вы ссылаетесь? Я довольно новичок, так что только способ, которым я знаю, чтобы подключить действия к методу, - это IBAction ctrl-drag! – Apneist

+0

Вы можете сделать это с помощью GestureRecognizers, а также с селектором, но посмотрите здесь: http://rshankar.com/uigesturerecognizer-in-swift/ https://developer.apple.com/reference/uikit/uitapgesturerecognizer – PeejWeej

+0

Thank вы сэр - я проверю это – Apneist

0

Я не думаю, что это плохая идея, чтобы иметь 12 кнопок. Назначьте каждому из них тег с 1-12 и подключите их к одному и тому же IBAction.

@IBAction func didTapImageButton(button: UIButton) { 
    print("You just tapped image \(button.tag)") 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^