2016-10-18 3 views
1

У меня есть кнопка в моей пользовательской ячейке таблицы, которая показывает имя пользователя.
Когда вы нажимаете на нее, вы должны быть взяты в свой профиль, но ничего не происходит?Кнопка на ячейке таблицы не работает - swift

Вот мой пользовательский класс TableView клетка (commentsTableViewCell.swift):

import UIKit 

protocol commentsTableViewCellDelegate { 
    func namesIsTapped(cell: commentsTableViewCell) 
} 


class commentsTableViewCell: UITableViewCell { 

    @IBOutlet weak var nameButton: UIButton! 
    @IBOutlet weak var commentLabel: UILabel! 
    @IBOutlet weak var profilePic: UIImageView! 
    @IBOutlet weak var dateLabel: UILabel! 
    @IBOutlet weak var uidLabel: UILabel! 

    var delegate: commentsTableViewCellDelegate? 

    override func awakeFromNib() { 
     super.awakeFromNib() 
     // Initialization code 
    } 

    override func setSelected(selected: Bool, animated: Bool) { 
     super.setSelected(selected, animated: animated) 

     // Configure the view for the selected state 
    } 

    @IBAction func nameIsTapped(sender: AnyObject) { 
     //4. call delegate method 
     //check delegate is not nil 
     if let _ = delegate { 
      delegate?.namesIsTapped(self) 
     } else { 
     print("Delegate is \(delegate)") 
     } 
    } 
} 

Вот важная часть commentsTableViewController.swift:

class commentsTableViewController: UITableViewController, commentsTableViewCellDelegate, UITextViewDelegate { 

    @IBOutlet weak var commentLabel: UITextView! 
    @IBOutlet weak var theLabel: UILabel! 

    var dataGotten = "Nothing" 
    var updates = [CommentSweet]() 

    func namesIsTapped(cell: commentsTableViewCell) { 
     //Get the indexpath of cell where button was tapped 
     //let indexPath = self.tableView.indexPathForCell(cell) 

     let allDataSend = cell.nameButton.titleLabel?.text! 
     self.performSegueWithIdentifier("toDetailtableViewController", sender: allDataSend) 

    } 

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
     if segue.identifier == "toDetailtableViewController" { 
      if let nextVC = segue.destinationViewController as? theProfileTableViewController { 
       nextVC.viaSegue = sender! as! String 
      } 
     } 

    } 

    override func viewDidLoad() { 
+0

Настроена задано свойство делегата для 'self' при визуализации клеток? – Ollie

ответ

6

Просьба указать делегат самостоятельно.

В cellforRowIndexPath

commentsTableViewCell.delegate = self 

Где commentsTableViewCell обычай UITableViewCell объект

+0

Это должен быть принятый ответ. –

+0

Конечно! Я совсем забыл об этом! Огромное спасибо :) –

3

Я предлагаю обрабатывать действие клетки в диспетчере viewController. Вы можете узнать, какая кнопка была нажата, установив для нее tag.

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
     let cell = tableView.dequeueReusableCell(withIdentifier: "Cell") as! TableViewCell 

     cell.myButton?.tag = indexPath.row 
     cell.myButton?.addTarget(self, action: #selector(), for: .touchUpInside) 

     return cell 
    } 

    func namesIsTapped(tappedButton: UIButton) { 
     // get the user (from users array for example) by using the tag, for example: 
     let currentUser = users[tappedButton.tag] 

     // do whatever you want with this user now... 

    }