2016-11-19 7 views
0

У меня есть TableView, у которого есть данные внутри него с помощью этикеток. Когда вы нажимаете на метку, Tap регистрируется, но теперь Я хотел бы получить данные щелкнутого ярлыка, и мне сложно это сделать. У меня есть те же функции, что и для кнопок, например, это то, как я делаю это для своих кнопок внутри TableView.IOS swift Как я могу получить текст меток внутри TableView на метке tap

Кнопка Нажмите Событие

 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. Это мой код для этикетки и о таком же такое же, как и выше, но отличается 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 не имеет метода тегов. Любые предложения были бы весьма полезны

ответ

1

Вам не обязательно использовать UITapGestureRecognizer. Просто используйте метод делегата. Установите UITableView делегата на ваш UIViewController и сделать класс соответствовать UITableViewDelegate

Для скор 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]) 
} 
+0

Это будет работать, кроме этого я я пытаюсь включить его в функцию, потому что вещи будут усложняться в будущем. – user1949387

+0

Вы всегда можете вызывать функции из 'didSelect' и передавать соответствующую информацию. – Rikh

+0

Спасибо, что это было необходимо – user1949387

3

Вы можете сделать что-то подобное:

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

Это действительно очень близко к нему. Единственная проблема с указанным выше кодом состоит в том, что он всегда вставляет значение столбца First. Я использую ваш код и попробую сделать его динамичным – user1949387