Ios 实现表功能所需的UITableViewDataSource协议吗

Ios 实现表功能所需的UITableViewDataSource协议吗,ios,uitableview,swift,uiviewcontroller,Ios,Uitableview,Swift,Uiviewcontroller,我用声明创建了一个类 类LessonDetailsViewController:UIViewController{ @ibvar-detailsTable:UITableView 我可以填充表中的内容,并通过实现 正确的tableView功能 但是我没有实现UITableViewDataSource协议,所有这些函数都是在该协议中定义的。有人能给我解释一下,我缺少的是什么关键概念使这成为可能吗?iOS怎么知道调用此类的这些方法没有实现UITableViewDataSource协议?您必须实现UI

我用声明创建了一个类

类LessonDetailsViewController:UIViewController{ @ibvar-detailsTable:UITableView

我可以填充表中的内容,并通过实现 正确的tableView功能


但是我没有实现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!我清楚地了解到,视图是盲目地在控制器上寻找方法来调用,不管它是否实现了协议。我确实看到了实现协议是如何更干净、更可读,但在哪一点上功能“不起作用”没有在类上定义这个协议?希望这是有意义的。