Ios 如何在UITableView中使用外部数据源

Ios 如何在UITableView中使用外部数据源,ios,swift,uitableview,uiviewcontroller,Ios,Swift,Uitableview,Uiviewcontroller,我有一个UIViewController,其中嵌入了UITableView。如果将插座添加到我的ViewController类中 因为我不想让ViewController太重,所以我想将UITableViewDataSource协议和UITableViewDelegate协议的方法分为不同的类 因此,我创建了一个TableViewDataSource.swift和一个TableViewDelegate类: class TableViewDelegate : NSObject, UITableVi

我有一个
UIViewController
,其中嵌入了
UITableView
。如果将插座添加到我的ViewController类中

因为我不想让
ViewController
太重,所以我想将
UITableViewDataSource
协议和
UITableViewDelegate
协议的方法分为不同的类

因此,我创建了一个TableViewDataSource.swift和一个TableViewDelegate类:

class TableViewDelegate : NSObject, UITableViewDelegate {
    //custom code here if required
}

class TableViewDataSource : NSObject, UITableViewDataSource {
    func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return 1
    }
    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

       return 1
    }
     func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

        let cellIdentifier = "MyCellIdentifier"
        let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath)

        cell.textLabel?.text = "left text"
        cell.detailTextLabel?.text = "right text"

        return cell


    }


}

class ViewController: UIViewController {

    @IBOutlet var tableView: UITableView!
    override func viewDidLoad() {
        super.viewDidLoad()

        tableView.dataSource = TableViewDataSource()
        tableView.delegate = TableViewDelegate()

        tableView.setNeedsDisplay()

        // Do any additional setup after loading the view, typically from a nib.
    }
}
在我的故事板中,我在tableView中创建了一个带有标识符“MyCelliIdentifier”的原型单元。我使用此标识符在TableViewDataSource方法中创建一个单元格

但是,如果我运行应用程序,我只会看到一个空的tableView。这些方法甚至不会被调用,即使我在ViewController的viewDidLoad方法中设置了它们。我还试图通过调用setNeedsDisplay来强制tableView重画。这也没有效果


你走在正确的道路上,我相信你的问题很容易解决。请看这里:

tableView.dataSource = TableViewDataSource()
tableView.delegate = TableViewDelegate()
这将创建一个新的
TableViewDataSource
和一个新的
TableViewDelegate
,并将它们分别分配给
dataSource
delegate
。以下是
UITableView
上的属性:

weak public var dataSource: UITableViewDataSource?
weak public var delegate: UITableViewDelegate?
注意
位?您正在创建它们并将它们指定给弱属性,因此它们很快就会被丢弃


您的解决方案是在视图控制器中为这两个新对象创建属性,然后在
viewDidLoad()
中创建这些属性,并将它们发送到表视图中。

您并不是在真正加载tables@lzl你能告诉我如何加载这些表吗?你需要像一个实际的数据源,像一个数组,然后使用该操作的内容,它现在只是发送测试数据,@lzl。显然,最终的程序需要使用真实数据,但现在只返回虚拟数据就足以看出有问题了。@TwoStraws,你说得对,很抱歉好,现在我看到了一些东西。但还有别的事。即使我设置了rightDetailLabel,它的文本也是空的。有趣的是,标签确实存在,文本设置正确,但不知何故不可见。我很高兴问题解决了!请将其标记为正确,以便其他人也能找到它。你真的应该把新问题作为新问题发布,否则别人很难找到。(但在此之前,有一个简短的提示:您是否检查了自动布局约束以确保表格的两个边缘都可见?)