Я новичок в Swift (и в разработке XCode в целом), и мне было интересно, как сделать ImageView на раскадровке интерактивным. То, что я пытаюсь сделать, это сделать так, чтобы при его нажатии показывался другой контроллер представления.
Как сделать UIImageView на раскадровке кликабельным (быстрым)
Ответ 1
Вы можете добавить tapGesture для этого. Вот код:
class ViewController: UIViewController {
@IBOutlet weak var imageView: UIImageView!
override func viewDidLoad() {
    super.viewDidLoad()
    // create tap gesture recognizer
    let tapGesture = UITapGestureRecognizer(target: self, action: "imageTapped:")
    // add it to the image view;
    imageView.addGestureRecognizer(tapGesture)
    // make sure imageView can be interacted with by user
    imageView.userInteractionEnabled = true
}
func imageTapped(gesture: UIGestureRecognizer) {
    // if the tapped view is a UIImageView then set it to imageview
    if let imageView = gesture.view as? UIImageView {
        println("Image Tapped")
        //Here you can initiate your new ViewController
        }
    }
}
 Swift 3.0
class ViewController: UIViewController {
    @IBOutlet weak var imageView: UIImageView!
    override func viewDidLoad() {
        super.viewDidLoad()
        // create tap gesture recognizer
        let tapGesture = UITapGestureRecognizer(target: self, action: #selector(ViewController.imageTapped(gesture:)))
        // add it to the image view;
        imageView.addGestureRecognizer(tapGesture)
        // make sure imageView can be interacted with by user
        imageView.isUserInteractionEnabled = true
    }
    func imageTapped(gesture: UIGestureRecognizer) {
        // if the tapped view is a UIImageView then set it to imageview
        if (gesture.view as? UIImageView) != nil {
            print("Image Tapped")
            //Here you can initiate your new ViewController
        }
    }
}
 Swift 5.0
class ViewController: UIViewController {
    @IBOutlet weak var imageView: UIImageView!
    override func viewDidLoad() {
        super.viewDidLoad()
        // create tap gesture recognizer
        let tapGesture = UITapGestureRecognizer(target: self, action: #selector(ViewController.imageTapped(gesture:)))
        // add it to the image view;
        imageView.addGestureRecognizer(tapGesture)
        // make sure imageView can be interacted with by user
        imageView.isUserInteractionEnabled = true
    }
    @objc func imageTapped(gesture: UIGestureRecognizer) {
        // if the tapped view is a UIImageView then set it to imageview
        if (gesture.view as? UIImageView) != nil {
            print("Image Tapped")
            //Here you can initiate your new ViewController
        }
    }
}
		Ответ 2
Вы можете сделать это еще проще и сделать изображение кликабельным через раскадровку без какого-либо кодирования.
-  Сначала вам нужно перетащить 
UITapGestureRecognizerна вашUIImageViewв раскадровке. -  Затем вы создаете IBAction, который хотите запустить в своем коде, с 
@IBAction func imageClicked(_ sender: Any) {} -  Затем вам нужно подключить 
UITapGestureRecognizerкIBActionв вашем классе, выбрав распознаватель жестов в структуреDocument Outline, затем переключившись наConnection Inspector Tabи перетащив "Sent Actions→ "Selectorна свойUIViewControllerгде вы затем выберите соответствующее действие, которое вы создали ранее. -  Наконец, вы должны установить флажок " 
User Interaction Enabledв представлении изображения. 
 Готово, полностью кликабельный UIImageView без написания ни одной строки кода, кроме очевидной функции, которую вы хотите вызвать. Но, эй, если вы, например, хотите вместо этого перейти к переходу, то вы можете вообще не кодировать, используя распознаватели жестов " Triggered Segues вместо " Sent Actions.
Хотя раскадровка имеет свои ограничения, нет необходимости писать код для кликабельных изображений. ;)
Ответ 3
Я бы предложил создать UIButton без текста и вместо этого сделать его желаемым. После этого вы можете перетаскивать CTRL с изображения на контроллер вида, к которому вы хотите перейти. Или вы можете просто сделать IBAction в своем коде контроллера контроллера, который вручную отходит.
Ответ 4
для быстрой версии 3.0 попробуйте под кодом
override func viewDidLoad() {
super.viewDidLoad()
let tap1 = UITapGestureRecognizer(target: self, action: #selector(tapGesture1))
imageview.addGestureRecognizer(tap1)
imageview.isUserInteractionEnabled = true
}
func tapGesture1() {
    print("Image Tapped")
}
		Ответ 5
На раскадровке установлен режим просмотра изображения, а затем получить с помощью этого метода
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{
    UITouch *touch = [touches anyObject];
    if ([touch view] == yourImageView)
    {
            //add your code for image touch here 
    }
}
		Ответ 6
 Я добился этого, установив взаимодействие с пользователем enable = true
и этот код ниже в TouchesBegan... Чистый и простой для этого
ImageView также был внутри StackView
if let touch = touches.first {
   if touch.view == profilePicture {
      print("image touched")
   }
}
		Ответ 7
Ну, хотя вы можете использовать UITapGestureRecognizer, как упомянуто выше, если вам нужно сделать быстрый проект и просто позаботиться о функциональности приложения, самый простой способ - это создать прозрачную кнопку, закрывающую ваш UIImageView без текста, и затем использовать ее написать любой код, который вы хотите. Конечно, это не рекомендуется, если вы делаете очень важный проект или что-то в этом роде, но если вы просто хотите сделать быстрое приложение (скажем, очень простой MVP для некоторого собрания), этот метод должен работать нормально.
