我在我的TableViewController的不同UIViews上創建和識別了幾個水龍頭手勢,並且正確識別了不同的手勢。在本代碼所示:UITableViewCell中的多個水龍頭手勢
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("CustomCell", forIndexPath: indexPath) as! CustomCell
let tapOnView1 = UITapGestureRecognizer(target: self, action: Selector("handleTap:"))
let tapOnView2 = UITapGestureRecognizer(target: self, action: Selector("handleTap:"))
cell.View1.addGestureRecognizer(tapOnView1)
cell.View1.userInteractionEnabled = true
cell.View2.addGestureRecognizer(tapOnView1)
cell.View2.userInteractionEnabled = true
return cell
}
我柄敲擊看起來是這樣的:
func handleTap(sender:UITapGestureRecognizer) {
let tappedView = sender.view
self.tableView.beginUpdates()
if tappedView == cell.View1 {
print("View 1 Tapped")
} else if tappedView == cell.View2 {
print("View 2 Tapped")
}
}
我想,因爲實際上幾個UIViews有不同的操作這些代碼移動到我的CustomCell UITableViewCell類,需要在水龍頭上進行。另外將它們全部移到Cell本身似乎對我來說是正確的。我尋找答案,但我看到的唯一真實答案是使用按鈕,有幾個原因,這對我來說真的不是沒有一些嚴重的重構和重寫的選項。我曾嘗試多次迭代下面的代碼在我CustomCell類:
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
let tapOnView1 = UITapGestureRecognizer(target: self, action: Selector("handleTap:"))
addGestureRecognizer(tapOnView1)
let tapOnView2 = UITapGestureRecognizer(target: self, action: Selector("handleTap:"))
addGestureRecognizer(tapOnView2)
}
這handleTap功能:
func handleTap(sender: UITapGestureRecognizer) {
if delegate != nil && item != nil {
if sender.view == view1 {
print("view1 tapped")
} else {
print("view2 tapped")
}
}
}
的廠景水龍頭永遠不會被調用。無論在我點擊的單元格中的哪個位置,它都會調用view2 tap。我曾嘗試使用不同的選擇器函數(即handleTapOne:用於View1,handleTapTwo:用於View2),但我似乎無法弄清楚如何做到這一點。
它再次在我的UITableViewController中工作,但當我嘗試將所有的tap識別器移動到UITableViewCell時它不起作用。
感謝您的幫助。
你在'override func awakeFromNib()'中的代碼看起來不對,應該是'self.View1.addGestureRecognizer(tapOnView1)'嗎? – iphonic
嗯,我有點白癡。謝謝。這確實解決了我的問題。我瘋了,還有一件愚蠢的事情讓我沮喪。感謝你的回答。 – Rakote