正在实现表功能所需的 UITableViewDataSource 协议
Posted
技术标签:
【中文标题】正在实现表功能所需的 UITableViewDataSource 协议【英文标题】:Is implementing the UITableViewDataSource protocol required for table functionality 【发布时间】:2015-04-01 14:34:28 【问题描述】:我用声明创建了一个类
class LessonDetailsViewController: UIViewController @IBOutlet var detailsTable: UITableView!
我可以填充表格中的内容并通过实现 正确的 tableView 函数。
但我没有实现定义所有这些功能的 UITableViewDataSource 协议。有人可以向我解释一下我缺少什么使这成为可能的关键概念吗? ios怎么知道调用这个类的这些方法没有实现UITableViewDataSource协议?
【问题讨论】:
【参考方案1】:你必须要实现UITableview dataSource和delegate方法所需的方法。
(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath【讨论】:
【参考方案2】:你的类绝对应该从这个协议中实现必要的方法。这足以让表视图工作,因为即使您没有声明您的类实现了此协议,您的类也可以执行表视图委托方法。在您的情况下,表格视图调用您的类以获取一些数据并且不检查它是否conformsToProtocol
,只是发送类似tableView:numberOfRowsInSection:
的消息。
【讨论】:
非常感谢迈克!正如我清楚地理解的那样,视图盲目地在控制器上寻找方法来调用它是否实现协议。我肯定看到了实现协议是如何更清洁、更易读的,但是如果没有在类上定义这个协议,功能会“不起作用”吗?希望这是有道理的。【参考方案3】:好的,我将尝试解释如何连接您的 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 需要的这些功能
【讨论】:
以上是关于正在实现表功能所需的 UITableViewDataSource 协议的主要内容,如果未能解决你的问题,请参考以下文章