我的项目中有4个文件:
myTableViewController.swift
myTableViewDataSource.swift
myCustomCell.swift公司
MyCuffelCy.Xib
以下是我实现的:
myTableViewController.swift:
import UIKit
class myTableViewController: UIViewController {
let cellIdentifier: String = "myCell"// set same id in storyboard as well
@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
setup()
// Do any additional setup after loading the view.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func setup(){
let myDataSource = myTableViewDataSource.init(str: "init!")
tableView.registerNib(UINib(nibName: "myCustomCell", bundle: nil), forCellReuseIdentifier: "myCell")
tableView.dataSource = myDataSource
}
myTableViewDataSource.swift:
import UIKit
class myTableViewDataSource: NSObject, UITableViewDataSource, UITableViewDelegate {
init(str:String) {
print(str)
}
// MARK: UITableViewDataSource
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
print("section")
return 3
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
print("row")
return 5
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("myCell", forIndexPath: indexPath) as! myCustomCell
print("where's my cell")
return cell;
}
}
我所要做的只是让数据源成为另一个类,并将它的实例变量分配给我的tableView。
更新
根据@Rajan Maheshwari
在
tableview.reloadData()
的底部添加setup()
将得到正确的节/行号,但仍然没有打印。。。从未执行过。
我这里可能有什么问题?
最佳答案
这是因为您的数据模型是局部变量。把它移到班级级别。例如:
class myTableViewController: UIViewController {
let myDataSource: myTableViewDataSource
...
func setup() {
myDataSource =
...
这种方法称为MVVM模式。您可以找到有关此模式的信息here。
此外,您的类应该以CamelCase样式命名。所以请将
my...
改为My...
。