2017-07-07 8 views
2

Ich habe eine Frage über die Delegiertenfunktion UITableViewdidSelectRowAt. Alles funktioniert gut, aber die didSelectRowAt wird leider nicht aufgerufen. Ich habe eine andere stackoverflow-Frage über das Problem gelesen und einige Lösungen ausprobiert, aber keine davon funktioniert für mich. Ich habe eine Unterklasse der Tableview, die die Delegierten selbst:'didSelectRowAt' wird nicht aufgerufen

class MyTableView : UITableView, UITableViewDelegate{ 

    override func awakeFromNib() { 

     super.awakeFromNib() 

     separatorStyle = .none 

     backgroundView = nil 
     backgroundColor = UIColor.clear 

     isScrollEnabled = false 

     delegate = self 
     isEditing = false 
     allowsSelection = true 

    } 


// func tableView(_ tableView: UITableView, didHighlightRowAt indexPath: IndexPath) { 
//  
// this is working   
// 
// } 

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

     print("not called") 

    }  

} 

So alle Subklassen von MyTableView wird die Datenquelle Sachen implementieren und diese auch gut funktioniert (im Falle wird das irgendwie erwähnt).

Die seltsame Sache ist, dass didHighlightRowAt aufgerufen wird, so dass der Delegierte irgendwie funktioniert. Nur die didSelectRowAt, die ich möchte, wird nicht angerufen.

Übrigens gibt es keine UITapGestureRecognizer.

Kann mir irgendwie hier einen Rat geben. Gibt es Eigenschaften, die falsch sind?

+0

Stellen Sie sicher, dass in Ihrer Zelle die Benutzerinteraktion aktiviert ist –

+0

check Tabellenansichtszellen sind auswählbar & prüfen Benutzerinteraktion aktiviert oder nicht? –

+0

Haben Sie einen 'UITapGestureRecognizer' in Ihrem View-Controller? – Lawliet

Antwort

1

Ich weiß nicht, was andere Lösungen, die Sie versuchen, aber wenn Sie eine benutzerdefinierte viewcell verwenden, könnte es sein, dass Sie „Benutzer-Interaktion aktiviert“ auf dieser Komponente ermöglichen didint.

+0

Ich habe es zweimal überprüft. Es ist aktiviert. Ich habe in der Funktion didHighlightRowAt (die funktioniert) einen Unterbrechungspunkt gesetzt, um die Eigenschaft isUserInteractionEnabled zu überprüfen. –

+0

Ich habe es mit einem Beispielcode überprüft und es funktioniert gut. Ziemlich sicher, dass es mit Ihrer benutzerdefinierten UITableViewCell verwandt ist. Stellen Sie sicher, dass die Benutzerinteraktion in Ihren Unteransichten deaktiviert ist. –

1

Bitte überprüfen Sie TableView's Zelle allowsSelection.

tableView.allowsSelection = true 
+0

Auch dieses überprüft. Es ist auf ".default" festgelegt, wie von diesem Haltepunkt übernommen: currentCell.selectionStyle \t (UITableViewCellSelectionStyle) Standard –

+0

Antwort aktualisiert. Bitte prüfe. seine allowSelection –

0

Es könnte Ausgabe werden folgende

1) Sie haben die Delegierten nicht Setup des UITableView

Solution - `self.tableview.delegate = self` 

2) Überprüfen Sie, ob der Benutzer-Interaktion keine disable für UITableView oder UITableViewCell ist

Solution: self.tableview.isUserInteractionEnabled = true 

3). Überprüfen Sie, ob die Tabellenansicht nicht ausgewählt ist.

Solution: self.tableview.allowsSelection = true 

4) Überprüfen Sie, ob eine der Gesten nicht aktiviert ist.