2015-10-26 27 views
0

我在我的项目4个文件:斯威夫特分离UITableViewDataSource

  • myTableViewController.swift
  • myTableViewDataSource.swift
  • myCustomCell.swift
  • myCustomCell.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

setup()底部加入了tableview.reloadData()权, 但仍"where's my cell"没有印刷的部分/行号......为cellForRowAtIndexPath从未执行。

我在这里得到了什么样的问题?

+1

在setup函数中,只需在最后一行重新载入表格。可以工作吗? –

+0

@RajanMaheshwari打印结果正确!但我的牢房还没有出现。 – bluenowhere

+0

在myTableViewDataSource.swift 中注册你的单元格tableView.registerNib(nibName:“myCustomCell”,bundle:nil),forCellReuseIdentifier:“myCell”) 并告诉结果。 –

回答

2

这是因为你的DataModel是局部变量。将其移至课堂级别。 e.g:

class myTableViewController: UIViewController { 
    let myDataSource: myTableViewDataSource 
... 
    func setup() { 
    myDataSource = 
... 

这种方法称为MVVM模式。你可以找到关于这种模式的信息here。 另外,您的课程应以CamelCase风格命名。所以请将my...更改为My...

+2

中改变是的。你是对的。使他们达到课堂水平解决了问题 –

+0

作品完美!是的,我在CamelStyle中命名我的原始类,感谢提醒:) – bluenowhere

0

这是为什么:在您的UI设计文件(故事板或XIB)中,您的表视图有一个条目dataSource。它默认为视图控制器。

如果要更改它,请将您的数据源类添加为对象。从插座中拖出一个连接。

如果您不这样做,很难覆盖此设置。

enter image description here

+0

我想那个数据源在viewDidLoad设置功能代码 –