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,它的文本也是空的。有趣的是,标签确实存在,文本设置正确,但不知何故不可见。我很高兴问题解决了!请将其标记为正确,以便其他人也能找到它。你真的应该把新问题作为新问题发布,否则别人很难找到。(但在此之前,有一个简短的提示:您是否检查了自动布局约束以确保表格的两个边缘都可见?)