2017-09-29 2 views
1

Ich bin auf der Suche nach einer Unterklasse für eine Tabellenansicht, die ich gerne alle meine App verwenden würde. Mein Problem ist, wenn ich die Variable fields setze, ist die Tabellenansicht noch leer. Ich gehe davon aus, dass die Variable fields nicht richtig eingestellt ist, wenn sie im neuen ViewController eingestellt ist. Vielen Dank für die Hilfe im Voraus.wie UIntableView zu Unterklasse für andere ViewControllers

MySubClass

import UIKit 
import LGButton 

class RquestTableViewController: UITableViewController { 
    var fields:[UIView] 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     viewSetup() 
    } 

    func viewSetup(){ 
     tableView.register(CustomFormCell.self, forCellReuseIdentifier: labelReuseCellIdentifier) 
     self.tableView.tableFooterView = UIView.init(frame: CGRect.zero) 

    } 
} 
//MARK: Delegate 
extension RquestTableViewController { 
    override func numberOfSections(in tableView: UITableView) -> Int { 
     return fields.count 
    } 
    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
     let cell = tableView.dequeueReusableCell(withIdentifier: self.labelReuseCellIdentifier, for: indexPath) as! CustomFormCell 
     let itemView = fields[indexPath.row] 
     cell.viewPassed = itemView 
     cell.backgroundColor = .clear 
     if let _ = itemView as? UILabel { 
      cell.separatorInset = UIEdgeInsetsMake(0, cell.bounds.size.width, 0, 0) 
      return cell 
     } 
     if let _ = itemView as? UIButton { 
      cell.separatorInset = UIEdgeInsetsMake(0, cell.bounds.size.width, 0, 0) 
      return cell 
     } 
     if let _ = itemView as? LGButton { 
      cell.separatorInset = UIEdgeInsetsMake(0, cell.bounds.size.width, 0, 0) 
      return cell 
     } 
     return cell 
    } 
    override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { 
     return 40.0 
    } 
} 

MyNewViewController

class NewRquestViewController: RquestTableViewController { 

    lazy var password:JVFloatLabeledTextField = { 
     let v = JVFloatLabeledTextField() 
     v.placeholder = "Password" 
     return v 
    }() 
    override func viewDidLoad() { 
     super.viewDidLoad() 
     fields = [password] 
    } 
} 
+1

Sie müssen reloadData –

Antwort

0

Sie sich vergewissert haben, dass fields ist wirklich nicht richtig eingestellt ist? Ich sehe keinen Grund, warum es nicht sein würde. Aber ich sehe ein anderes Problem: Zusätzlich zum Überschreiben numberOfSections(in:) und tableView(_,cellForRowAt:) müssen Sie tableView(_,numberOfRowsInSection:) überschreiben. Was Sie jetzt haben, ist numberOfSections(in:), die die Anzahl der Felder zurückgibt, aber tableView(_,cellForRowAt:) erwartet, die Zeilen mit den Feldern zu füllen. Das heißt, tableView(_,cellForRowAt:) heißt nur, wenn section0 ist, so dass Sie höchstens ein Feld sehen würden. Ändern Sie stattdessen numberOfSections(in:), um 1 zurückzugeben, und implementieren Sie tableView(_,numberOfRowsInSection:), um fields.count zurückzugeben.

+0

Haben es funktioniert danke, nur um zu beachten, dass die registerCell muss von der neuen viewController – pprevalon

+0

Aufruf es sein? Ich hätte das nicht einmal in Erwägung gezogen. – NRitH

Verwandte Themen