2017-02-07 1 views
0

Ich habe eine benutzerdefinierte UIView mit 3 Tabellenansichten, die Tabellenansichten sind selbstauslegung abhängig von dem Inhalt sie haben, und sie zeigen eine andere Spitze, wenn sie leer sind als wenn sie habe Inhalt. All dies ist in eine Bildlaufansicht eingebettet und es funktioniert bereits, meine Ansicht scrollt und die Tabellenansichten zeigen den Inhalt entsprechend an und sie passen sich automatisch an, die Größe der Bildlaufansicht passt sich auch ohne Probleme an.Stellvertreter zum Steuern einer Schaltfläche in einer Zelle funktioniert nicht

In zwei der Tabellenansichten, wenn die Tabellenansichten Elemente haben, gibt es einige Schaltflächen in der Zellenspitze, auf die ich zugreifen möchte, zusammen mit dem Index der Zelle innerhalb des View-Controllers, wo ich die Tabellenansicht definiert habe.

enter image description here

Hier im Bild ich den Tableviews mit je einem Punkt bin zeige, hat die Canastas Tableview nur eine Löschpunkt-Taste und die Productos Tableview verfügt über eine Löschtaste Element und einen Schritt der erhöhen oder zu verringern Menge.

Ich fand eine Lösung mit Delegaten in StackOverflow Get button click inside UI table view cell, die ich implementiert. Aber aus irgendeinem Grund funktioniert es nicht und der Code in der Delegate-Methode wird nicht ausgeführt.

Hier ist mein Code:

CanastasViewCell

import UIKit 

protocol CanastasViewCellDelegate: class { 
    func closeButtonTapped(at index: IndexPath) 
} 

class CanastasViewCell: UITableViewCell { 

@IBOutlet weak var imagenProducto: UIImageView! 

@IBOutlet weak var nombreProducto: UILabel! 
@IBOutlet weak var descProducto: UILabel! 
@IBOutlet weak var precioProducto: UILabel! 

@IBOutlet weak var closeButton: UIButton! 

weak var delegate: CanastasViewCellDelegate? 

var indexPath: IndexPath! 

override func awakeFromNib() { 
    super.awakeFromNib() 

} 

@IBAction func eliminarProducto(_ sender: AnyObject) { 
     self.delegate?.closeButtonTapped(at: indexPath) 
    } 

} 

CarritoViewController

import UIKit 

class CarritoViewController: UIViewController, UITableViewDelegate, 
UITableViewDataSource, CanastasViewCellDelegate { 

func closeButtonTapped(at index: IndexPath) { 
    print("Button tapped at index:\(index)") 
} 
+0

Ich habe ein Problem mit Ihrem Code, da es nicht auf Englisch ist. Was bedeutet EliminarProducto? – paper1111

+0

eliminarProducto bedeutet deleteProduct und es sollte das Produkt aus dem indexPath.row löschen (ich habe diesen Teil noch nicht codiert), also sollte es gerade jetzt gedruckt werden Button am Index angetippt: (indexPath.row) aber es wird nicht ausgedruckt etwas. –

+0

Überprüfen Sie, ob Sie die Taste ordnungsgemäß an die '@ IBAction' angeschlossen haben. – paper1111

Antwort

1

Es sieht aus wie Sie nicht die Delegierten innerhalb CarritoViewController Einstellung. Sie sollten sicherstellen, dass Sie innerhalb func tableView(UITableView, cellForRowAt: IndexPath) setzen.

+0

Es scheint, dass Sie richtig sind, weil ich jetzt eine Fehlermeldung erhalten, wenn Sie auf die Schaltfläche klicken: Fataler Fehler: unerwartet gefunden Null beim Auspacken ein optionaler Wert Also ich denke, die Funktion wird jetzt gelesen und ich muss herausfinden Warum ist es gleich Null? –

+1

Setzen Sie 'indexPath' irgendwo ein? Wenn Sie sich den Code anschauen, den Sie geteilt haben, sieht es so aus, als hätten Sie ihn als implizit unverpacktes optionales Objekt erstellt, ihm aber nie einen Wert gegeben. Daher ist es immer noch Null, wenn Sie Ihre Delegate-Methode aufrufen. – swillsea

+0

@swillsea Ich habe den Code von diesem Beitrag kopiert: http://StackOverflow.com/Questions/20655060/Get-Button-Click-inside-ui-table-view-Cell Es scheint, dass der IndexPath nicht festgelegt ist, weil, Ich habe versucht, es auf [] zu setzen und jetzt bekomme ich den Fehler nicht mehr, wie und wo kann ich den indexPath einstellen, so dass ich den indexPath der Reihe mit jedem Klicken erfahren und speichern kann? –

Verwandte Themen