2016-11-22 102 views
0

我不知道爲什麼,但是我的UITapGestureRecognizer沒有正確觸發。事實上,它根本不是射擊。我試圖獲得一個函數在圖像的水龍頭上運行。Swift 3:UITapGestureRecognizer沒有觸發

信息有關的設置:

  • 不使用故事板,加載一切編程
  • ,我就裝這個也該視圖上有一個UICollectionView

確定這樣的代碼:

UIImageView聲明如下:

let backButtonIcon: UIImageView = { 
    let bbi = UIImageView() 
    bbi.image = UIImage(named: "backIcon") 
    bbi.translatesAutoresizingMaskIntoConstraints = false 
    bbi.layer.zPosition = 2 
    return bbi 
}() 

我再補充說,認爲:

view.addSubview(backButtonIcon) 

到水龍頭功能添加到UIImageView的我使用:

let tapBackButton = UITapGestureRecognizer(target: self, action: #selector(backButtonPressed)) 
backButtonIcon.isUserInteractionEnabled = true 
backButtonIcon.addGestureRecognizer(tapBackButton) 

,最後,這裏是我想的功能運行,只是簡單的打印的時刻:

func backButtonPressed(sender: UITapGestureRecognizer) { 
    print("Go Back Pressed") 
} 

更新:

我已經嘗試添加:

bbi.isUserInteractionEnabled = true 

也:

backButtonIcon.isUserInteractionEnabled = true 

更新2:

我創造了另一個空白視圖,並且使用的代碼,正是因爲它是在這裏,它的工作。

難道這與UICollectionView有關嗎?

我使UICollectionView zPosition -1和UIImageView zPosition在1,但那也不起作用。

+0

選擇器看起來不正確,它應該至少與無法識別的選擇器崩潰。 「backButtonIcon」的超級視圖究竟是什麼? – Larme

+0

@Larme沒有崩潰。爲什麼它不正確? – JamesG

+0

當我沒有爲添加到的視圖維護引用(即變量)時,我遇到了gestureRecognizer無法正常工作的問題。這是我的SO帖子:http://stackoverflow.com/questions/40144874/frontmost-uiview-with-tapgesturerecognizer-not-receiving-touches/40157112#40157112 – toddg

回答

2

默認情況下,圖像視圖忽略用戶事件。通常情況下,您僅使用圖像視圖來呈現界面中的視覺內容。如果您還希望圖像視圖處理用戶交互,請將其isUserInteractionEnabled屬性的值更改爲true。做完這些之後,您可以附加手勢識別器或使用任何其他事件處理技術來響應觸摸事件或其他用戶發起的事件。

來源:https://developer.apple.com/reference/uikit/uiimageview

+0

的更新1我試過了:/ – JamesG

+0

更新了我的問題也 – JamesG

+1

那麼它肯定會是解決方案的一部分,所以不知道爲什麼反對票 – Brett

0

我認爲這個問題是與UICollectionView,它是由那些已經被定義啓用水龍頭UICollectionViewCells的。

我正在瀏覽一個很老的應用程序(Swift 1。X)我寫了我的個人使用(因爲它從來沒有見過天日)和這裏就是我似乎做的事 - 你可能需要做一些這方面的變化:

  • 子類UICollectionViewCell並添加一個UILabel和UIImageView作爲它的子視圖,填充它們(以及用於輕擊操作的NSURL)。

  • 聲明(並通過)一個特定的UIViewController也是我的UICollectionView委託(也爲我的目的,它是一個SFSafariViewController委託)。

  • 在該VC的viewDidLoad()我成立了長按(去除)和雙擊(爲重新加載)的手勢,但沒有設立輕拍姿態 - 不需要它。

  • 在該VC的viewDidLoad()我加載(和填充)單元格。

這是我認爲你是被卡住,但沒有更多的代碼,我不知道的事:

  • 編碼反對:

    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { 
        if let cell = collectionView.cellForItemAtIndexPath(indexPath) as? BookmarkCell { 
         selectedBookmarkSection = indexPath.section 
         selectedBookmarkRow = indexPath.row 
         sfc = SFSafariViewController(URL: cell.targetUrl!, entersReaderIfAvailable:true) 
         sfc.delegate = self 
         presentViewController(sfc, animated: true, completion: nil) 
        } else { 
         // Error indexPath is not on screen: this should never happen. 
        } 
    } 
    

請善良,因爲這是我在2014年7月寫的! (我更新了Swift 3.x的collectionView(didSelectItemAt:indexPath :),但就是這樣)。

TR; DR:我想 - 特別是如果你的水龍頭在UICollectionView之外被看到 - 這可能會讓你工作。