2016-02-17 5 views
8

В настоящее время у меня есть представление, которое создано и добавлено в UIView в ViewDidLoad(). Я пытаюсь использовать UIGestureRecognizers для обнаружения нажатия и отображения определенной кнопки. Мой текущий код:Добавление UIGestureRecognizer To Subview Programmatically in Swift

override func viewDidLoad() { 
    super.viewDidLoad() 
    architectView = CustomClass(frame: self.view.bounds) 
    self.view.addSubview(architectView)   
    let gestureRecognizer = UITapGestureRecognizer(target: self, action: "handleTap:") 
    gestureRecognizer.delegate = self 
    architectView.addGestureRecognizer(gestureRecognizer) 
} 

func handleTap(gestureRecognizer: UIGestureRecognizer) { 
    let alert = UIAlertController(title: "Alert", message: "Message", preferredStyle: UIAlertControllerStyle.Alert) 
    alert.addAction(UIAlertAction(title: "Click", style: UIAlertActionStyle.Default, handler: nil)) 
    self.presentViewController(alert, animated: true, completion: nil) 
} 

Функция handleTap() - это простой тест, чтобы узнать, распознаются ли ответвители. Этот код не запускает UIAlert при нажатии? Что мне не хватает?

+0

Да. Я отредактировал, чтобы сделать более ясно. –

+0

Вы пробовали поставить точку разрыва в handleTap: чтобы увидеть, действительно ли функция вызвана? –

+0

Да, я просто попробовал. Функция не получится вызванной –

ответ

12

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

class ViewController: UIViewController, UIGestureRecognizerDelegate { 

    var architectView = UIView() 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     architectView = UIView(frame: self.view.bounds) 
     self.view.addSubview(architectView) 
     let gestureRecognizer = UITapGestureRecognizer(target: self, action: "handleTap:") 
     gestureRecognizer.delegate = self 
     architectView.addGestureRecognizer(gestureRecognizer) 
    } 

    func handleTap(gestureRecognizer: UIGestureRecognizer) { 
     let alert = UIAlertController(title: "Alert", message: "Message", preferredStyle: UIAlertControllerStyle.Alert) 
     alert.addAction(UIAlertAction(title: "Click", style: UIAlertActionStyle.Default, handler: nil)) 
     self.presentViewController(alert, animated: true, completion: nil) 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

} 
9

Swift код 3 версии, основанной на Raphael Silva ответ:

import UIKit 

class ViewController: UIViewController, UIGestureRecognizerDelegate { 

    var architectView = UIView() 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     architectView = UIView(frame: self.view.bounds) 
     self.view.addSubview(architectView) 
     let gestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(ViewController.handleTap(gestureRecognizer:))) 
     gestureRecognizer.delegate = self 
     architectView.addGestureRecognizer(gestureRecognizer) 
    } 

    func handleTap(gestureRecognizer: UIGestureRecognizer) { 
     let alert = UIAlertController(title: "Alert", message: "Message", preferredStyle: UIAlertControllerStyle.alert) 
     alert.addAction(UIAlertAction(title: "Click", style: UIAlertActionStyle.default, handler: nil)) 
     self.present(alert, animated: true, completion: nil) 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

} 
+0

О, боже мой. Спасибо, я искал пчел далеко и широко, чтобы работать только с MODERN. Почему в мире Apple так много умалчивает. Большинство их извращений кажутся совершенно ненужными и просто вызывают замешательство. –

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