1

在我看来,我使用了 UITableView,我在 nib 中设置了委托和数据源以及文件所有者。在我的类 .h 文件中,我符合如下协议...

例如:

@interface test : UIViewController<UITableViewDelegate, UITableViewDataSource>
{
...
...
}

一切正常......委托方法都被正确调用......现在我的问题是为什么我们在.h中添加“UITableViewDelegate,UITableViewDataSource”。没有那个,我也会接到那些电话。这个有什么用?

谢谢

4

6 回答 6

5

我猜有两个原因:

  1. 这是为了让编译器告诉您将实现数据源和委托方法,如果您不实现它们,编译器会发出警告。

  2. 仅当您在头文件中添加类似内容时,这些方法的自动完成功能才有效

于 2013-08-21T07:28:28.183 回答
2

Apple协议定义为:

在面向对象编程的世界中,能够定义一组在给定情况下对象所期望的行为是很重要的。例如,表视图希望能够与数据源对象进行通信,以便找出需要显示的内容。这意味着数据源必须响应表视图可能发送的一组特定消息。

Objective-C 允许您定义协议,这些协议声明预期用于特定情况的方法。

要了解有关 TableView 协议参考的更多信息,您可以查看:

  1. UITableViewDataSource 协议参考
  2. UITableViewDelegate 协议参考
于 2013-08-21T07:38:22.517 回答
2

如果你写<UITableViewDelegate, UITableViewDataSource>它只是意味着你的班级conformsToProtocolUITableViewDelegateUITableViewDataSource

您可以分配一个test(您的测试类)并调用它

[testObject conformsToProtocol:@protocol(UITableViewDelegate)]; 

它会回来true的。

别的

它会回来false的。顺便说一句,除非您编写 tableviewDelegate 方法,否则它不会为您自动完成

你的问题是为什么我们在 .h 中添加“UITableViewDelegate,UITableViewDataSource”。没有那个,我也会接到那些电话。

因为它确实喜欢这样。

if ( [delegate respondsToSelector:@selector(cellWillDisplay...)] )
{
      [delegate cellWillDisplay...]; //Apple gives you call
}

是的,您的班级实现了该方法,cellWillDisplay... 然后您就接到了电话!

于 2013-08-21T07:39:45.427 回答
2

如果在您的 .xib 文件中设置数据源并委托给文件所有者,我认为没有必要这样做。

于 2013-08-21T07:31:37.017 回答
1

当您想以UITableView编程方式创建或使用而不是nib文件时,您需要 <UITableViewDelegate, UITableViewDataSource>在 .h 文件中指定。

当你想在 .nib 文件中使用 UITableView 而不是编程时,你不需要在 .h 文件中指定它。

于 2013-08-21T07:29:30.493 回答
1
See this url for reference..

https://developer.apple.com/library/ios/documentation/uikit/reference/UITableViewDelegate_Protocol/Reference/Reference.html

Also In this url we will use the methods frequently are

– tableView:heightForRowAtIndexPath:

  This will set Height

– tableView:didDeselectRowAtIndexPath:

 This will act as cellback for ui actions you are doing in table

– tableView:viewForHeaderInSection:

 usually we will add uiviews as table header

– tableView:viewForFooterInSection:

 usually we will add uiviews as table footer

– tableView:heightForHeaderInSection

 will set height to section header 

– tableView:heightForFooterInSection

 will set height to section footer
于 2013-08-21T07:31:52.507 回答