IOS swift如何在标签点击

时间:2016-11-19 07:53:55

标签: ios swift uitableview swift3 uigesturerecognizer

我有一个TableView,它通过标签在其中包含数据。点击标签时,Tap会注册,但现在我想获得点击标签的数据,我很难完成这项工作。我有相同的功能为Buttons工作,例如这就是我在TableView中为我的按钮做的。

按钮单击事件

      var locations = [String]()
      @IBOutlet weak var Location: UIButton!
     override func viewDidLoad() {
        super.viewDidLoad()
        TableSource.dataSource = self


    }
  func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "Registration_Search", for: indexPath)

        cell.Location.setTitle(locations[indexPath.row], for: UIControlState.normal)

        cell.Location.addTarget(self, action: #selector(Registration_SearchController.Location_Click(sender:)), for: .touchUpInside)
        cell.Location.tag = indexPath.row

        return cell
    }

   func Location_Click(sender: UIButton) {

         print(locations[sender.tag])


    }

上面的代码允许我获取所点击的任何按钮的数据。我现在尝试对Label执行相同的操作,但无法获取Label所具有的数据。这是我的标签代码,哦上面的相同,但不同的ViewController

      var locations = [String]()
      @IBOutlet weak var location: UILabel!
     override func viewDidLoad() {
        super.viewDidLoad()
        TableSource.dataSource = self
        location.isUserInteractionEnabled = true

    }
            func tapFunctionn(sender: UITapGestureRecognizer)
{
   // I would like to get the data for the tapped label here
    print("Tapped")
}
  func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "Registration_Search", for: indexPath)

          cell.location.text = Locations[indexPath.row]
          let tap = UITapGestureRecognizer(target:self, action: #selector(HomePageC.tapFunctionn))

    cell.location.addGestureRecognizer(tap)

        return cell
    }

再次单击标签时,它会打印点击,但无法获取实际数据。在Button功能中,我可以使用 Sender.Tag ,但UITapGestureRecognizer没有Tag方法。任何建议将不胜感激

2 个答案:

答案 0 :(得分:3)

你可以做出类似的事情:

func tapFunctionn(recognizer: UIPinchGestureRecognizer) {
  let view = recognizer.view
  let index = view?.tag
  print(index)
}

答案 1 :(得分:1)

您不必使用UITapGestureRecognizer。只需使用委托方法。将UITableView代理人设置为UIViewController,并使该课程符合UITableViewDelegate

对于swift 3

override func viewDidLoad() {
    super.viewDidLoad()
    TableSource.dataSource = self
    TableSource.delegate = self
}

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let cell = tableView.cellForRow(at: indexPath)

    //access the label inside the cell
    print(cell.label?.text)
    //or you can access the array object
    //print(Locations[indexPath.row])
}