2014-09-25 91 views
25

的通過的UIImageView的子類我有以下代碼行初始化後:GestureRecognizer沒有響應挖掘

self.userInteractionEnabled = true 
self.addGestureRecognizer(UITapGestureRecognizer(target: self, action: "handleTap:")) 

我創造了必要的相關函數:

func handleTap(gestureRecognizer: UITapGestureRecognizer){ 
    print("In handler") 
} 

在輕敲在視圖問題,「處理程序中從未打印到控制檯」。然後我刪除了處理函數以查看編譯器是否會抱怨缺少的函數。它沒有。

我很積極難住。我真的很感謝任何輕鬆的人可以擺脫這一點。

更新:我的類實際上是一個UIImageView,而不是UIView的

+1

嘗試'self.view.addGestureRecognizer'我沒有斯威夫特嘗試過,但是這是我的目的C. – 2014-09-25 00:47:51

+0

用,我使用'self.userInteractionEnabled'意味着這些代碼片段實際上在我感興趣的修改視圖內。因此,'self.view'是不可能的!感謝您貢獻一切! – Didia 2014-09-25 10:24:24

回答

6

我發現後,通過我的代碼,認真梳理了答案。

其中一個家長的意見而無須提供frame:

雖然這是一個noobish足夠的錯誤聲明:保證本題缺失創建,賠率是別人也有同樣的問題在未來...

+0

我現在有同樣的問題。你的意思是在沒有提供框架的情況下創建了一個父視圖?你怎麼做到這一點? – guest 2015-04-10 08:04:10

+0

我有這個完全相同的問題。我有一個UIScrollView子視圖,它有一個UIImageView子視圖。我沒有爲UIImageView指定框架,並且這阻止了按鈕的工作。謝謝! – allocate 2015-04-22 17:40:45

+0

有誰知道爲什麼這會導致手勢識別器無法檢測到觸摸..? – Entalpi 2016-03-23 22:17:16

5

最有可能你在錯誤的地方添加UIGestureRecognizer。這裏是從storyboard工作的樣品UIView。如果你動態創建你的UIView,那麼你應該把這個初始化放在正確的構造函數中。

class TestView: UIView 
{ 
    override func awakeFromNib() 
    { 
     self.userInteractionEnabled = true 
     self.addGestureRecognizer(UITapGestureRecognizer(target: self, action: "handleTap:")) 
    } 

    func handleTap(gestureRecognizer: UITapGestureRecognizer) 
    { 
     println("Here") 
    } 
} 
6

試試這個

override func viewDidAppear(animated: Bool) { 
    super.viewDidAppear(animated) 
    self.view.userInteractionEnabled = true 
    var tapGesture = UITapGestureRecognizer(target: self, action: Selector("handleTap:")) 
    self.view.addGestureRecognizer(tapGesture) 
} 

func handleTap(sender : UIView) { 

    println("Tap Gesture recognized") 
} 
+1

謝謝,在我的情況下,將userInterActionEnabled添加到我的UIImageView是解決方案。 – Moonwalkr 2015-07-17 08:51:22

0

本準則適用於我的XCode 7.0.1

import UIKit 

class ImageView: UIImageView { 

    init(frame: CGRect, sender: Bool, myImage: UIImage) { 
     super.init(frame: frame) 
     self.image = myImage 
     initBorderStyle(sender) 

     // enable user interaction on image. 
    self.userInteractionEnabled = true 
    let gesture = UITapGestureRecognizer(target: self, action: "previewImage:") 
    addGestureRecognizer(gesture) 

    } 

    required init?(coder aDecoder: NSCoder) { 
    super.init(coder: aDecoder) 
    } 

    func previewImage(myGesture: UITapGestureRecognizer? = nil) { 
     print("i'm clicked") 
    } 

private func initBorderStyle(sender: Bool) { 
    self.layer.masksToBounds = true 
    self.layer.cornerRadius = 8 
    self.layer.borderWidth = 0.5 
    self.layer.borderColor = getBorderColor(sender) 
    self.backgroundColor = getColor(sender) 
} 


func getBorderColor(sender: Bool) -> CGColor { 
    var result: CGColor 
    if sender { 
     result = UIColor(red: 0.374, green: 0.78125, blue: 0.0234375, alpha: 0.5).CGColor 
    } else { 
     result = UIColor(red: 0.3125, green: 0.6015625, blue: 0.828125, alpha: 0.5).CGColor 
    } 
    return result 
} 
} 
70

我使用的是點觸手勢識別器,我放在一個UILabel用故事板。

爲了得到這個工作,我還必須在故事板中的UILabel的屬性檢查器中的標記爲「User Interaction Enabled」的塊中打上覆選標記。

enter image description here

+1

就是這樣!它的工作原理! – Arnlen 2017-04-15 11:43:45

+3

是的,就是這樣 - 在我上次構建應用程序之後的這段時間裏忘記了這一點。看起來像是附加手勢識別器時應該自動執行的操作。 – huygir 2017-09-14 14:18:44

+1

適合我,thx – zgcharley 2017-11-10 17:12:33