2017-04-19 52 views
0

我使用該代碼來檢測一個長按壓元件:通行證對象到選擇

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
// some stuff 

if let labelCell = model as? TTTLabelCell{ 
labelCell.delegate = self 
labelCell.textLabel.addGestureRecognizer(longPressRec) 
    } 
} 

這是手勢識別

longPressRec.addTarget(self, action:#selector(labelLongPressed)) 

而這是選擇

func labelLongPressed(){ 
     print("Label Long pressed") 
    // labelCell.backgroundColor = UIColor.blue 
    } 

作爲對代碼的評論,我想要實現的是將所選對象(labelCell)傳遞給選擇器labelLongPressed(),這會將讓我改變一些屬性。你有一個想法如何做到這一點?

+0

使用這種'longPressRec.addTarget(自我,動作:#selector(labelLongPressed :))' –

+0

@dahiya_boy中,OP是要求通過表格單元格。該代碼只通過長按識別器。 – dfd

回答

0

變化FUNC如下:

func labelLongPressed(_ sender: UITapGestureRecognizer){ 
     print("Label Long pressed") 
     let labelCell: TTTLabelCell = sender.view // track as per your view hierarchy 
     labelCell.backgroundColor = UIColor.blue 
    } 
0

首先,我建議將手勢識別的細胞本身,而不是文本標籤。這爲用戶提供了更大的點擊區域,並且在識別長按時更容易引用單元格。

labelCell.addGestureRecognizer(longPressRec) 

添加參數傳遞給你的姿勢動作,通過手勢識別。然後,我們可以使用識別器的視圖來獲取對單元格的引用 - 因爲我們將手勢識別器直接添加到單元格中。

func labelLongPressed(_ recognizer: UIGestureRecognizer) { 
    guard recognizer.state == .began else { return } 

    print("Label Long press began!") 

    if let labelCell = recognizer.view as? TTTLabelCell { 
     labelCell.backgroundColor = .blue 
    } 
} 

最後,將目標添加到手勢識別器時,更新選擇器以匹配我們的函數簽名。

longPressRec.addTarget(self, action:#selector(labelLongPressed(_:)))