2016-10-20 61 views
0

我在故事板中有一組12個UIImageViews,爲了參數的緣故,我想讓每一個打印到日誌「你剛剛點擊圖像x」,當用戶點擊它時,其中x是從1-12開始拍攝的圖像數量)。所以我需要檢測哪些圖像被點擊,並根據這些信息做一些事情。在Swift 3中,最好的方法是做什麼? (我假設有12個IBActions - 將它們當作帶背景圖像的按鈕處理 - 是非常糟糕的代碼,並且它們需要放置在背景圖像頂部的特定位置,所以不能使用UICollectionView來完成此操作。)謝謝當用戶點擊View Controller中的多個UIImage中的一個時,如何打印「圖像x輕敲」? (Swift 3)

回答

0

首先,我想使用的CollectionView是一個更好的方法來達到你想要什麼。但是,你需要:

  • 設置userInteractionEnabledtrue您的所有imageViews的。
  • 設置所有imageViews的順序 - tag,例如image1.tag = 1,image2.tag = 2 ...等等。
  • 實現方法是所有的圖片竊聽的目標,應該是與此類似:

    func imageViewTapped(imageView: UIImageView) { print("You just tapped image (imageView.tag)") }

  • 創建酮單點觸手勢和分配實現的方法,以它的選擇:

let tapGesture = UITapGestureRecognizer(target: self, action: #selector(imageViewTapped))

  • 最後,添加tapGesture所有的您的圖像,例如:image1.addGestureRecognizer(tapGesture),image2.addGestureRecognizer(tapGesture)...等等。

希望這會有所幫助。

+0

謝謝你的回答 - 我試了一下,但沒有反應,當我點擊圖像。我已經設置了標籤,userInteraction = yes,並將UIImages的插口引用到Storyboard中的TapGestureRecognizer。當我以編程方式添加image1.addGestureRecognizer(tapGesture),image2.addGestureRecognizer(tapGesture)等,那麼它只能在最後一個工作,忽略之前的。任何想法可能是錯的?我在編碼方面處於初級水平,因此可能很簡單。我會繼續努力 - 再次感謝 – Apneist

+0

更新,終於使它工作 - 它的唯一工作方式是,根據上面的解決方案,但是,我必須爲每個圖像做出不同的tapGestureRecognizer實例。如果我按照您的解決方案進行了相同的操作,它只會記錄最後一個,並且只有在最後一個uiImageView上使用tap識別功能才能添加tapGesture。所以我做了這樣的事情: – Apneist

+0

讓tapGestureFirst = UITapGestureRecognizer(目標:自我,動作:#selector(TAP)) 讓tapGestureTwo = UITapGestureRecognizer(目標:自我,動作:#selector(TAP)) – Apneist

0

這本身並沒有錯誤的代碼,但是如果你這樣做,或者在每個ImageView上輕敲手勢,你可能會想要將這部分邏輯分開。

有,你可以用它來更好地管理這種事情,尤其是如果這是應該擴大其他方法/視圖,但你的約束,這是我的建議:

要麼TapGestureRecognizers添加到您的imageViews或使它們的按鈕,那麼他們的一切行動連接到這一點:

所有的
@IBAction func phoneWasPressed(sender: AnyObject) { 
    guard let tappedImageView = sender as? UIImageView else { 
     return 
    } 

    switch tappedImageView { 
    case imageView1: 
     //do something 
    case imageView2: 
     // do something else 
    //etc. 
    default: 
     break 
    } 
    switch sender 
} 
+0

謝謝您的回答 - 我如何將多個TapGestureRecognizers的操作連接到您所指的IBaction?我是一個新手,所以只有通過IBAction ctrl-drag,我才知道將方法連接到一個方法。 – Apneist

+0

您可以使用GestureRecognizers以及選擇器來做到這一點,但請看看這裏:http://rshankar.com/uigesturerecognizer-in-swift/ https://developer.apple.com/reference/uikit/uitapgesturerecognizer – PeejWeej

+0

謝謝你先生 - 我會檢查出來 – Apneist

0

我不認爲這是一個壞主意有12個按鈕。爲其中的每個人分配一個來自1-12的標記並將它們連接到相同的IBAction。

@IBAction func didTapImageButton(button: UIButton) { 
    print("You just tapped image \(button.tag)") 
} 
相關問題