2016-10-18 5 views
1

Ich habe eine Schaltfläche in meiner benutzerdefinierten Tabellenansicht Zelle, die den Namen des Benutzers zeigt.
Wenn Sie darauf klicken, sollten Sie zu seinem/ihrem Profil gebracht werden, aber nichts passiert?Schaltfläche auf Tableview-Zelle funktioniert nicht - swift

Hier ist meine benutzerdefinierte Tableview Zellklasse (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)") 
     } 
    } 
} 

Hier ist der wichtige Teil der 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

Haben Sie die Delegat-Eigenschaft auf 'self' zugewiesen, wenn Sie die Zellen machen? – Ollie

Antwort

6

Bitte stellen Sie den Delegaten auf Selbst.

In cellforRowIndexPath

commentsTableViewCell.delegate = self 

Wo commentsTableViewCell der Brauch ist UITableViewCell

Objekt
+0

Dies sollte die akzeptierte Antwort sein. –

+0

Natürlich! Das habe ich total vergessen! Ich danke dir sehr :) –

3

Ich schlage vor, die Wirkung der Zelle zu handhaben Schaltfläche im ViewController. Sie können erkennen, welche Taste angetippt wurde, indem Sie eine tag dafür setzen.

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... 

    } 
Verwandte Themen