我有一个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. } }
在我的Storyboard中,我在tableView中创建了一个标识符为“MyCellIdentifier”的原型单元格.我使用此标识符在我的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()中创建这些属性并将它们发送到表视图中.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。