2016-03-30 18 views
0

Ich habe eine Komponente in XIB Datei erstellt. Diese Datei enthält zwei KomponentenTableView Zelle wählen Ereignis nicht triggern

  1. Label-
  2. Tableview

ich dann verknüpft haben und setzen es File's Owner Klasse SampleView. Ich habe die XIB-Datei view mit SampleView.swift Datei und diese Datei nur folgenden haben angebracht Code in seiner Klasse:

@IBOutlet var view: UIView! 

Ich habe jetzt eine Controller Datei SampleController mit Protokollen UIViewController, UITableViewDelegate und UITableViewDataSource erstellt. Ich habe den folgenden Code platziert in seinem init() func die benutzerdefinierte Komponente anzuzeigen:

init() { 
     super.init(nibName: nil, bundle: nil) 

     modalPresentationStyle = UIModalPresentationStyle.Custom 
     view.addSubview(SampleView()) 
} 

ich diese SampleController bin mit programmatisch als Modal anzuzeigen.

Diese Codes werden als Modal mit Label und TableView angezeigt. Es füllt auch die Daten in TableView auf. Das Problem ist:

Wenn ich die Zelle in der Tabelle antippen, wird das Ereignis beim ersten Versuch nicht ausgelöst. Wenn ich auf eine andere Zelle tippe, wird das vorherige Zellevent ausgelöst.

Irgendeine Idee warum passiert das?

Hier gibt es 2 Funktionen zum Bestücken und Handhabungszelle Hahn:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

     var cell = tableView.dequeueReusableCellWithIdentifier("CELL") 
     if (cell == nil) { 
      cell = UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: "CELL") 
     } 
     cell!.textLabel?.text = sampleData[indexPath.row]["title"] 
     return cell 
} 

func tableView(tableView: UITableView, didDeselectRowAtIndexPath indexPath: NSIndexPath) { 
     print("tapped") 
} 
+0

Souds wie eine Wiederverwendung von Zellen Problem. Haben Sie die erforderlichen 'UITableViewDataSource' Methoden implementiert? Und wenn ja, kannst du sie in deiner Frage veröffentlichen? – Koen

+0

@Koen Ich habe erwähnt, dass ich UIViewController, UITableViewDataSource und UITableViewDelegate in 'SampleController' Datei verwendet habe. Die Daten füllen sich ebenfalls gut, aber das Abgriffsereignis wird ausgelöst, nachdem die zweite Zelle angetippt wurde. – codelearner

+0

Ok, also was steckt in den Funktionen 'cellForRowAtIndexPath' und' didSelectRowAtIndexPath'? – Koen

Antwort

0

Sie benötigen eine andere Methode verwenden, um die Zelle aus der Warteschlange entfernt:

var cell = tableView.dequeueReusableCellWithIdentifier("CELL", forIndexPath: indexPath) 

Die Prüfung für eine Null-Zelle ist unnötig , Apropos.

+0

Ich habe diesen Fehler jetzt erhalten: 'kann eine Zelle mit der ID CELL nicht entfernen - muss eine Nib oder eine Klasse für den Bezeichner registrieren oder eine Prototypzelle in einem Storyboard verbinden. – codelearner

+0

Ja, das müssen Sie beheben. Suche SO und du wirst viele ähnliche Probleme finden. – Koen

+0

Dies ist nicht erforderlich, wenn Sie eine dynamische Zelle erstellen und 'UITableView' anstelle von' UITableViewController' verwenden müssen. – codelearner

2

Darn es! Ich benutzte didDeselectRowAtIndexPath anstelle von didSelectRowAtIndexPath. Das wird passieren, wenn Sie nach Mitternacht programmieren.

+0

Das ist so ein häufiger Fehler. Sieh dir upvotes an, zählt auf diesen Beitrag http://stackoverflow.com/a/12587624/3077831 – Wujo

Verwandte Themen