2015-04-01 35 views
0

香港专业教育学院创建了一个类的声明正在实施表功能所需的UITableViewDataSource协议

类LessonDetailsViewController:UIViewController的{ @IBOutlet VAR detailsTable:UITableView的!

我可以在我的表中填充内容并通过执行 适当的tableView函数来提供操作。

但我没有实现UITableViewDataSource协议,其中定义了所有这些函数。有人能向我解释我失踪的关键概念是什么使这成为可能? iOS如何知道调用这个类的这些方法没有实现UITableViewDataSource协议?

回答

0

你必须要实现UITableview的dataSource和委托方法所需的方法。

  • (NSInteger的)numberOfSectionsInTableView:(UITableView的*)的tableView
  • (的UITableViewCell *)的tableView:(UITableView的*)的tableView的cellForRowAtIndexPath:(NSIndexPath *)indexPath
0

你的类一定要实现必要的方法从这个协议。这足以允许表视图工作,因为即使你没有声明你的类实现了这个协议,你的类也可以执行表视图委托方法。在你的情况下,表视图调用你的类,以获得一些数据,并不检查它是否conformsToProtocol,只是发送一条消息,如tableView:numberOfRowsInSection:

+0

非常感谢Mike!我清楚地理解,这个观点是盲目地寻找控制器上的方法来调用或者不执行协议。我一定会看到它的更清晰和更具可读性,让协议得以实现,但如果没有在课堂上定义此协议,功能“不起作用”?希望这是有道理的。 – Brian 2015-04-01 17:02:13

0

OK,我要试图解释如何把你的tableView但我打算用斯威夫特

现在你有这样的:

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需要