узнать, какой UIImageView был задействован, и получить его индекс в массиве - PullRequest
0 голосов
/ 27 мая 2020

Итак, прямо сейчас у меня есть код, который создает TapGestureRecognizer для каждого изображения в массиве, и то, что я пытаюсь сделать, - это вернуть индекс изображения, которое было затронуто пользователем. Каким будет самый простой способ добиться этого? Я новичок в Swift, поэтому я получил часть этого из учебника на YouTube, и я действительно не понимаю, как использовать распознаватели жестов: /

Это то, что у меня есть (упрощено, чтобы включить только то, что актуально):

import UIKit

class HomeViewController: UIViewController {

var recognizersAdded = false
@IBOutlet weak var right1: UIImageView!
@IBOutlet weak var right2: UIImageView!
@IBOutlet weak var right3: UIImageView!

override func viewDidLoad()
{
    super.viewDidLoad()
    var houseImages = [self.right1, self.right2, self.right3]

    for imageview in houseImages
    {
         if !recognizersAdded
         {
            let recognizer = UITapGestureRecognizer(target: self, action: #selector(imageTapped))
            imageview!.addGestureRecognizer(recognizer)
            imageview!.isUserInteractionEnabled = true
         }


       }
            recognizersAdded = true
    }
@IBAction func imageTapped(recognizer: UIGestureRecognizer)
{
   if let view = recognizer.view as? UIImageView
   {
        var i = 0
        //set i to index of image tapped
        advance4(index: i)
   }
}

Ответы [ 2 ]

0 голосов
/ 27 мая 2020

Поскольку у вас уже есть массив, в котором хранятся все ваши изображения, довольно легко узнать, какое изображение (и индекс) было задействовано, выполнив поиск по индексу изображения в houseImages.

Потому что вам не нужно сложные проверки для получения индекса с помощью firstIndex(where: [...]), я бы предложил просто использовать firstIndex(of: UIImageView) в вашем случае.

@IBAction func imageTapped(recognizer: UIGestureRecognizer) {
    guard let tappedView = recognizer.view as? UIImageView else {
        return
    }
    let index = self.houseImages.firstIndex(of: tappedView)
    print("House image index = \(index)")
}
0 голосов
/ 27 мая 2020

Вы можете сделать это довольно легко, так как вы уже создаете массив из UIImageView и вам просто нужен индекс затронутого imageView внутри массива, вам просто нужно использовать метод firstIndex(where:, вот код:

@IBAction func imageTapped(recognizer: UIGestureRecognizer) {
    let houseImages = [self.right1, self.right2, self.right3]
    if let view = recognizer.view as? UIImageView {
        let indexOfSelectedImageView = houseImages.firstIndex(where: { $0 == view })
        print(indexOfSelectedImageView)
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...