2016-12-13 26 views
0

同事們,當我在UITableView的單元格中按UILabel時,我遇到了獲取行的問題。 所以,我有在TableView中爲單元格獲取的行UILabel

class CellOfFirstTableView: UITableViewCell 

在那裏我有

@IBOutlet weak var labelChangeSomething: UILabel! 

與該小區我

class FirstTableViewController: UITableViewController 

工作,所以我想獲得排了壓UILabel,但我不不知道該怎麼做。我對新聞界的細胞和行動代碼:

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 

    let cell = tableView.dequeueReusableCell(withIdentifier: "firstCell", for: indexPath) as! CellOfFirstTableView 
    let list = sortOfSomething(id: id_something)[indexPath.row] 

    //tapRecognizer 
    let tap = UITapGestureRecognizer(target: self, action: #selector(FirstTableViewController.tapFunction)) 
    cell.labelChangeSomething.isUserInteractionEnabled = true 
    cell.labelChangeSomething.addGestureRecognizer(tap) 

    return cell 
} 

和功能作用:

func tapFunction(sender:UITapGestureRecognizer) { 

print("Hello world") 

    } 

我想獲得的壓制UILabel(當我按下UILabel我看到「Hello World」行,但我希望看到在位於什麼UILabel一行。我可以得到按壓的單元排,但用戶可以只按下UILabel和不按單元的一部分的地方UILabel不活躍。 感謝您的想法!

+0

你能只是檢查單元的選擇添加標籤到labelChangeSomething? –

+0

爲什麼你不使用didSelectRow方法? –

+0

@ArtemNovichkov不,因爲用戶在'UILabel'中按下時單元格不活躍 –

回答

2

1)您可以使用UIView的標籤屬性。就在cellForRowAtIndexPath方法

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 

    let cell = tableView.dequeueReusableCell(withIdentifier: "firstCell", for: indexPath) as! CellOfFirstTableView 
    let list = sortOfSomething(id: id_something)[indexPath.row] 

    //tapRecognizer 
    let tap = UITapGestureRecognizer(target: self, action: #selector(FirstTableViewController.tapFunction)) 
    cell.labelChangeSomething.isUserInteractionEnabled = true 
    cell.labelChangeSomething.addGestureRecognizer(tap) 
    //here added tag 
    cell.labelChangeSomething.tag = indexPath.row 

    return cell 
} 

2)更新您的選擇方法,如下面

func tapFunction(sender:UITapGestureRecognizer) { 

if let label = sender.view as? UILabel { 
    //print label tag here == indexpath.row 
    print("row = \(label.tag)") 
    } 

} 
+0

是的!它正在按我的要求工作,謝謝! –

+1

快樂幫助你.... –

0

,當你在你點擊的小區所屬的標籤上點擊你不需要UITapGestureRecognizer,你需要調用

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)

TableViewDelegate在寫這段代碼。

let cell = tableView.cellForRow(at: IndexPath) as? CellOfFirstTableView 
+0

我的UILabel處於活動狀態(將來)並且UILabel將重新加載cell,所以我需要'UITapGestureRecognizer' –

+0

你沒有一個好的方法,而不是讓你的'UILabel'可插入在你的'UILabel'上面的'UIButton'在單元格的頂部。所以當用戶點擊單元的標籤區域時,該按鈕的動作將被調用。 –

相關問題