2017-02-25 1 views
0

Ich habe Probleme mit Delegierten. Unten finden DemoTable Klasse des Typs UITableViewControllerDelegierter ist Null (Swift 3)

import Foundation 
import UIKit 

protocol DashboardControllerDelegate{ 
    func companySelected() 
} 


class DemoTable: UITableViewController 
{ 
    var delegate : DashboardControllerDelegate? 
    var arr_string = [String]() 

    init(array: [String]) 
    { 
     arr_string = array 
     super.init(nibName: nil, bundle: nil) 
    } 

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


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

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
    { 
     return arr_string.count 
    } 

    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) 
    { 
     delegate?.companySelected() 
    } 

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 

    { 
     var cell = tableView.dequeueReusableCell(withIdentifier: "Cell") 

     if cell == nil { 
      cell = UITableViewCell(style: .default, reuseIdentifier: "Cell") 
      cell?.frame(forAlignmentRect: CGRect(x: 0, y: 0, width: tableView.frame.size.width, height: 30)) 
     } 

     cell?.textLabel?.text = arr_string[indexPath.row] 

     return cell! 

    } 
} 

Hier Controller-Klasse

import UIKit 

class ViewController: UIViewController, DashboardControllerDelegate 
{   
    var dataSourceTable:DemoTable? 

    override func viewDidLoad() 
    { 
     super.viewDidLoad() 

     let fruitList = UITableView(frame: CGRect(x: 0, y: 0, width: view.frame.width, height: view.frame.height * 0.9)) 
     fruitList.backgroundColor = UIColor.white 

     let arr_Fruits = ["Mango", "Papaya", "Graps", "Apple"] 

     self.dataSourceTable = DemoTable(array: arr_Fruits) 
     fruitList.dataSource = self.dataSourceTable 
     fruitList.delegate = self.dataSourceTable 
     view.addSubview(fruitList) 
    } 

    override func didReceiveMemoryWarning() 
    { 
     super.didReceiveMemoryWarning() 
    } 

    func companySelected() 
    { 
     print("Selected") 
    } 
} 

Ausgabe ist die Delegatfunktion "companySelected" nicht in Viewcontroller Klasse aufgerufen. Hilfe wäre zu schätzen :-)

+0

Der Standard initializer 'DemoTable()' erstellt eine neue Instanz hinzuzufügen, die von der Instanz im Storyboard unterscheidet. Sie benötigen die eigentliche Referenz. – vadian

+0

Ich verwende kein Storyboard, bitte erkläre mehr, weil ich sehr neu in iOS bin. –

+0

Wenn Sie neu in iOS sind, warum verwenden Sie kein Storyboard? Das Erstellen der Benutzeroberfläche in Code ist ein ziemlich fortgeschrittenes Thema. In diesem Fall müssen Sie den Controller der Ansichtshierarchie hinzufügen. – vadian

Antwort

0

Ich habe Antwort bekommen. Ich habe

self.dataSourceTable?.delegate = self 

in viewDidLoad()