我创建了一个带声明
的类class LessonDetailsViewController:UIViewController { @IBOutlet var detailsTable:UITableView!
我可以填充表格中的内容并通过实现提供操作 适当的tableView函数。
但我没有实现定义所有这些函数的UITableViewDataSource协议。有人可以向我解释我错过了哪些关键概念使这成为可能吗? iOS如何知道调用这个类的这些方法并没有实现UITableViewDataSource协议?
答案 0 :(得分:0)
您必须实现UITableview dataSource和委托方法所需的方法。
答案 1 :(得分:0)
你的班级肯定应该从这个协议实施必要的方法。这足以允许表视图工作,因为即使您没有声明您的类实现此协议,您的类也可以执行表视图委托方法。在您的情况下,表格视图会调用您的类以获取某些数据,而不会检查它是否conformsToProtocol
,只是发送tableView:numberOfRowsInSection:
之类的消息。
答案 2 :(得分:0)
好的我将尝试解释如何连接你的tableView但我将使用Swift
现在你有了这个:
class LessonDetailsViewController: UIViewController { @IBOutlet var detailsTable: UITableView! }
您必须使此视图控制器能够满足tableView工作的两个必要协议
所以添加UITableViewDelegate和UITableViewDataSource
所以现在代码看起来像这样
class LessonDetailsViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { @IBOutlet var detailsTable: UITableView! }
如果你正确地进行了更改,你会收到一个错误{LessonDetailsViewController不舒服........}。这是因为UITableViewDataSource有两个必须实现的功能。两种协议都有许多,但它们是可选的。
第一个功能是描述每个人的样子。
func tableView(_ tableView: UITableView,cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell{}
第二个是女巫告诉tableView要显示多少行。
func tableView(_ tableView: UITableView,numberOfRowsInSection section: Int) -> Int{}
最后你必须连接tableView。
override func viewDidLoad() {
super.viewDidLoad()
detailsTable.delegate = self
detailsTable.dataSource = self
}
协议通常定义一些功能但不实现它们。所以在源代码中tableView正在使用这个函数,但你必须先实现它们。通过在UIViewController旁边添加UITableViewDataSource,你基本上告诉系统LessonDetailsViewController将实现tableView需要的这些函数