2017-07-23 2 views
0

Ich versuche, das Tableview-Protokoll in einer benutzerdefinierten Klasse zu implementieren. Mein Ziel ist es, eine TableView-Bibliothek zu entwickeln.IOS swift3 tableview Protokollimplementierung in einer anderen Klasse als UIController

meine Probe sieht Klasse wie diese

open class TempTableAdapter : NSObject, UITableViewDataSource, UITableViewDelegate{ 

    open var listTable : UITableView! 

    init(listTable:UITableView) { 
    super.init() 
    self.listTable = listTable 
    self.listTable.dataSource = self 
    self.listTable.delegate = self 
    } 

    open func numberOfSections(in tableView: UITableView) -> Int { 
    return 1 ; 
    } 

    open func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return 10 
    } 

    open func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCell(withIdentifier: "temp") as! TempCell 
    let text = "hello" 
    cell.label.text = text 
    return cell 
    } 

    open func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
    print ("tapped") 
    } 

} 

und meine ui Controller sieht wie folgt aus

class ViewController: UIViewController { 

    @IBOutlet weak var listTable: UITableView! 
    override func viewDidLoad() { 
     super.viewDidLoad() 
     let adap : TempTableAdapter = TempTableAdapter (listTable: listTable) 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 
} 

jemand kann darauf hinweisen, was bin ich dabei? Das Problem ist die UITableView zeigt die Standardtabelle, nicht mit meiner benutzerdefinierten Klasse.

Antwort

3

Der Adapter wird freigegeben, sobald die viewDidLoad Methoden beendet werden, da es eine lokale Variable ist. Machen Sie es stattdessen zu einer Eigenschaft des View-Controllers:

let adapter: TempTableAdapter! 

override func viewDidLoad() { 
    super.viewDidLoad() 
    adapter = TempTableAdapter (listTable: listTable) 
} 

Hoffe, das hilft! Viel Glück!

+0

Solch ein dummer Fehler zu machen! Danke für deine Hilfe, es funktioniert jetzt perfekt. –

Verwandte Themen