2016-12-24 3 views
0

Мне нужно добавить tapGesture для меток и ImageView. Как я могу создать общий метод жестового нажатия для меток и ImageView?Как написать общий метод для UITapGestureRecognizer с помощью swift

//TapGestureHandler 
extension EditViewController : UIGestureRecognizerDelegate 
{ 
//Add Gesture on ImageView 
func addGesture() 
{ 
    //Gesture Male 
    let maleTapGesture = UITapGestureRecognizer(target: self, action: #selector(maleGestureTap)) 
    maleTapGesture.delegate = self 
    imgViewMale.addGestureRecognizer(maleTapGesture) 

    //GestureFemale 
    let FemaleTapGesture = UITapGestureRecognizer(target: self, action: #selector(femaleGestureTap)) 
    FemaleTapGesture.delegate = self 
    imgViewFemale.addGestureRecognizer(FemaleTapGesture) 

    //Gesture MaleFemale 
    let maleFeTapGesture = UITapGestureRecognizer(target: self, action: #selector(maleFeGestureTap)) 
    maleFeTapGesture.delegate = self 
    imgViewMaleFe.addGestureRecognizer(maleFeTapGesture) 
} 

//Tap Gesture Male 
func maleGestureTap() 
{ 
    imgViewMale.backgroundColor = hexStringToUIColor(hex: "#CBFFE2") 
} 

//Tap Gesture Female 
func femaleGestureTap() 
{ 
    imgViewFemale.backgroundColor = hexStringToUIColor(hex: "#CBFFE2") 
} 

//Tap Gesture MaleFemale 
func maleFeGestureTap() 
{ 
    imgViewMaleFe.backgroundColor = hexStringToUIColor(hex: "#CBFFE2") 
} 
} 

Я не знаю, как мы можем написать общий метод.

+0

почему бы вам не создать это для UIView? UILabel и UIImageView расширяет UIView –

+0

Как создать для UIView также? Спасибо – kishor0011

+0

Пожалуйста, уточните мой обновленный вопрос. – kishor0011

ответ

1

Вы могли бы сделать что-то вроде этого:

Предположим, у вас есть несколько объектов, которые нужно присоединить обработчик водопроводную к, предполагая, что все они соответствуют протоколу UIView:

let subviews: [Any] = [label1, label2, label3, view1, imageview1]() 
label1.tag = 1 //** add a tag to your object ** 
for v in subviews { 
    self.addTapGesture(to: v) 
} 

func tapped(_ sender: UITapGestureRecognizer) { 
    print("tapped") 
    if sender.view?.tag == 1 { 
     // *** this is your label1 view *** 
    } 
} 

func addTapGesture(to: Any?) { 
    if let v = to as? UIView { 
     let tapGesture = UITapGestureRecognizer(target: self, action: #selector(self.tapped(_:))) 
     v.addGestureRecognizer(tapGesture) 
     v.isUserInteractionEnabled = true 
    } 
} 
+0

Спасибо за ответ. Я пойму и попробую. Лучше, если вы можете отредактировать его в соответствии с моим кодом. Спасибо – kishor0011

+0

Как я могу получить информацию о том, какой объект вызовет метод постукивания. Спасибо – kishor0011

+0

простым способом было бы добавить тег к вашему представлению, см. Мои правки. – Shachar

1

Определите цель selector(tapGestureHandler:) с аргументом, как

let tap = UITapGestureRecognizer(target: self, action: Selector("tapGestureHandler:")) 

и проверить компонент, как это.

func tapGestureHandler(_ sender: UITapGestureRecognizer) { 

    if sender.view is UIView { 
    // sender is a UIView 
    } 
    else if sender.view is UIImageView{ 
    // sender is UIimageView 
    } 
    else{ 
    // sender is none 
    } 
} 

И быть уверенным, что user interaction is true.

+0

Это в Objective -C , и я знаю только быстрый. спасибо – kishor0011

+0

@ kishor0011 перепроверьте мои обновления ответ –

+0

Пожалуйста, проверьте мой обновленный вопрос. – kishor0011

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