IOS swift3 表视图协议在 UIController 以外的不同类中的实现



我正在尝试在自己的自定义类中实现Tableview协议。我的目的是开发一个 TableView 库。

我的示例类如下所示

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")
}
}

我的 UI 控制器看起来像这样

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.
}
}

谁能指出我错过了什么? 问题是UITableView显示默认表,而不是使用我的自定义类。

一旦viewDidLoad方法退出,适配器就会被释放,因为它是一个局部变量。相反,请使其成为视图控制器的属性:

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

希望这有帮助!祝你好运!

最新更新