2016-04-12 3 views
0

Ich möchte einen Helper-View-Controller bereitstellen, der dem UITableViewDataSource-Protokoll entspricht. Aber diese Klasse soll nicht sein, muss durch Vererbung finalisiert werden.Wie stellt man einen geerbten View-Controller bereit, der ein UITableViewDataSource-Protokoll unterstützt?

Der Compiler erfordert dazu, das Protokoll in der Hilfsklasse zu implementieren. Wie könnte ich das beheben?

class BigHeadViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { 

    // Helper class that do ton of the job 
} 

class StoryTableViewController: BigHeadViewController { 
    // final implementation, must implement UITableViewDataSource 
} 

Antwort

0

In diesem Szenario Sie eine Implementierung der UITableViewDataSource Methoden in der Superklasse mit etwas entlang der Linien von haben:

func numberOfSectionsInTableView(tableView: UITableView) -> Int { 

    precondition(false, "UITableViewDataSource method MUST be implemented in subclass of BigHeadViewController")  

    return 1 
} 

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 

    precondition(false, "UITableViewDataSource method MUST be implemented in subclass of BigHeadViewController") 

    return 1 
} 

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

    precondition(false, "UITableViewDataSource method MUST be implemented in subclass of BigHeadViewController") 

    return UITableViewCell() 
} 

Wenn Sie implementieren die UITableViewDataSource Methoden in der Unterklasse nicht nennen Super. Dadurch wird sichergestellt, dass die erforderlichen Methoden in Unterklassen implementiert werden, oder Sie erhalten eine Fehlermeldung in der Konsole, wenn dies nicht der Fall ist (da die Super-Methode aufgerufen wird, wenn keine Unterklassenmethode verfügbar ist).

0

In diesem Fall würde ich ein UITableViewManager, dies zu UITableViewDelegate, UITableViewDataSource entsprechen würde dann würde ich, dass für jeden Tableview Unterklasse, die eine andere Art von Daten/Zellen erfordert.

ich einen Zeiger auf die UITableViewManager auf BigHeadViewController haben würde, aber es tatsächlich zuweisen würde, mit einer Unterklasse von UITableViewManager wie MessageTableViewManager: UITableViewManager

Dann, wenn Sie BigHeadViewController Unterklasse Sie die var außer Kraft setzen können, die UITableViewManager und machen eine andere sublcass ist von wenn verschiedene Daten erzeugt werden sollen.

Verwandte Themen