2017-07-20 6 views
-3

Ich versuche, eine Variable in UITableViewCell übergeben. Zur Zeit verwende ich mycell.myvar = "mystring" Dies funktioniert nicht, gibt es andere Möglichkeiten, dies zu tun. das folgende Beispiel soll "Hallo" drucken, aber es funktioniert nichtSwift übergeben Variablen in UItableCell

cellForRow

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
     let cell = tableView.dequeueReusableCell(withIdentifier: self.reuseCell, for: indexPath) as! CustomFormCellTextField 
     cell.myString = "hello" 
     return cell 
    } 

class CustomFormCellTextField:UITableViewCell { 
    var customTextField:JVFloatLabeledTextField = JVFloatLabeledTextField() 
    var myString:String = String() 
    override init(style: UITableViewCellStyle, reuseIdentifier: String?) { 
     super.init(style: style, reuseIdentifier: reuseIdentifier) 
     print(myString) 
      self.addSubview(customTextField) 
      constrain(self,customTextField) { (cell,row) in 
       row.left == cell.left 
       row.right == cell.right 
       row.top == cell.top 
       row.bottom == cell.bottom 
      } 
    } 


    required init?(coder aDecoder: NSCoder) { 
     fatalError("init(coder:) has not been implemented") 
    } 
} 
+0

Aktualisieren Sie Ihre Frage Informationen und etwas Code. Deine Frage ist sehr vage. Versuchen Sie, eine Beschriftung mit Ihrer Zeichenfolge festzulegen? Welcher Datentyp ist "myvar"? Wo rufst du 'mycell.myvar =" mystring "'? Ist Ihre Zelle eine UITableViewCell-Unterklasse? – skladek

+0

Warum funktioniert es nicht? –

+0

sollten Sie Code für die Klassen- und Tabellenansichtsdatenquellenmethode von mycell für diese bestimmte Codezeile schreiben. – adev

Antwort

0

In Ihrem CustomFormCellTextField diese myCell setzen:

mit mehr
var myString: String? { 
    didSet { 
     guard let text = myString else { return } 
     print(text) 
    } 
} 
+0

Das ist Arbeit, macht aber keinen Sinn, warum es in 'didset' funktioniert und nicht in' override init (Stil: UITableViewCellStyle, reuseIdentifier: String?) { super.init (Stil: Stil, WiederverwendungIdentifier: WiederverwendungIdentifier)} 'Es wäre besser, es im Init-Block zu haben – pprevalon

+0

@pprevalon Das erste Problem ist, dass der Init-Aufruf vor dequeueReusingCell aufgerufen wird. Wenn Sie das Textfeld in Init erstellen, ist die Zeichenfolge immer Null. Das zweite Problem ist, dass init nur das erste Mal aufgerufen wird, wenn ein Zellenobjekt angezeigt wird. Wenn Zellen vom Bildschirm gescrollt werden, wird 'prepareForReuse' aufgerufen und sie werden am Ende der Tabellenansicht neu eingefügt, ohne dass sie freigegeben oder neu initialisiert werden. Schauen Sie sich an, wie das Auspacken von Zellen funktioniert, um weitere Informationen zu erhalten. – skladek

+0

@skladek das macht Sinn Danke. – pprevalon