Ios 实现表功能所需的UITableViewDataSource协议吗
我用声明创建了一个类 类LessonDetailsViewController:UIViewController{ @ibvar-detailsTable:UITableView 我可以填充表中的内容,并通过实现 正确的tableView功能Ios 实现表功能所需的UITableViewDataSource协议吗,ios,uitableview,swift,uiviewcontroller,Ios,Uitableview,Swift,Uiviewcontroller,我用声明创建了一个类 类LessonDetailsViewController:UIViewController{ @ibvar-detailsTable:UITableView 我可以填充表中的内容,并通过实现 正确的tableView功能 但是我没有实现UITableViewDataSource协议,所有这些函数都是在该协议中定义的。有人能给我解释一下,我缺少的是什么关键概念使这成为可能吗?iOS怎么知道调用此类的这些方法没有实现UITableViewDataSource协议?您必须实现UI
但是我没有实现UITableViewDataSource协议,所有这些函数都是在该协议中定义的。有人能给我解释一下,我缺少的是什么关键概念使这成为可能吗?iOS怎么知道调用此类的这些方法没有实现UITableViewDataSource协议?您必须实现UITableview数据源和委托方法
- (NSInteger)表格视图中的节数:(UITableView*)表格视图
- (UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath
conformsToProtocol
,只发送一条消息,如tableView:numberOfRowsInSection:
好的,我将尝试解释如何连接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{}
第二个是witch,它告诉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需要d非常感谢Mike!我清楚地了解到,视图是盲目地在控制器上寻找方法来调用,不管它是否实现了协议。我确实看到了实现协议是如何更干净、更可读,但在哪一点上功能“不起作用”没有在类上定义这个协议?希望这是有意义的。