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 :-)
Der Standard initializer 'DemoTable()' erstellt eine neue Instanz hinzuzufügen, die von der Instanz im Storyboard unterscheidet. Sie benötigen die eigentliche Referenz. – vadian
Ich verwende kein Storyboard, bitte erkläre mehr, weil ich sehr neu in iOS bin. –
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