关于iOS Objective-C编程中的委托的困惑

我对Objective-C和iOS开发非常陌生。我有些困惑。我按照教程学习,他在IB中创建了UITableView。然后,他添加了用于将新TableView对象连接到viewcontroller的协议,如下所示:

   @interface viewController:UIViewCOntroller <UITableViewDelegate, UITableViewData>

然后,他为其中一个协议实现了所需的方法,例如viewController实现:

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

我的问题很简单,此定义中的每个标识符是什么。我的理解是所需的方法是“ cellForRowAtIndexPath”。从我对Objective-C的了解来看,这种语法意味着tableView是此方法的名称,它返回(UITableViewCell)并接受一个UITableView对象“ tableView”。我知道,如果需要实现的方法是“ cellForRowAtIndexPath”,那是不正确的。之后,语法使我感到困惑。我感到愚蠢,我已经编程多年了,无法理解其中的一些xcode和iOS应用程序结构概念。基本上,我只需要对此语法进行充分说明。谢谢。

席德

这样想吧。目标C中的代表/协议不过是OOP中的接口。

目标C是一种非常冗长的语言。最初,它很容易理解,但是一旦您摆脱了文化冲击,我就会爱上它的描述性美。

您的方法不是“ tableView”。您的方法是“一个tableView想要知道要为该indexPath呈现什么单元格”。明白我的意思吗?

用于iOS的方法(或消息,在Objective C中)的编写方式非常具有描述性。

在Java中,您将传递多个参数,例如:

methodName(type1 param1, type2 param2, ...)

在目标C中,它是:

- (returnType)thisMethodDoesThingsWhichNeeds:(type1)thingIneed1 andAnotherThingItNeedsIs:(type2)thingINeed2 ....

按照这种方法,您的情况是这样的:

  • 您需要在viewController上使用tableView
  • 对。tableView不能自己考虑。它需要有人来负责渲染和构建单元(viewController)。
  • 它还需要一个dataSource(再次是您的viewController)。
  • 因此,您可以在nib文件中告诉tableView这个viewController是它的委托,它是dataSource。
  • 现在,当您分配tableView时,它知道它的委托和dataSource属性已准备就绪,因此它开始向您的对象发送消息,例如:

    一个。我需要知道特定部分中有多少行-tableView:numberOfRowsInSection:

    b。嘿,我需要知道这一行的高度是多少-tableView:heightForRowAtIndexPath:

    C。嘿,有人告诉我当用户选择此单元格时该怎么做-tableView:didSelectRowAtIndexPath:

... 等等

另外,您注意到我是如何写下这些方法的?不只是tableView...是tableView:cellForRowAtIndexPath:那就是你的方法。

空洞的头脑,尝试理解某些语法背后的原因,您将爱上所学的内容:)

抱歉,我的答案到处都是,但是您的问题很开放。

您问题的更直接答案:

  1. (UITableViewCell *):这是返回类型。tableView要求您创建一个单元格并返回它。

  2. tableView:(UITableView *):这是您的viewController代表的tableView。为什么要获得对tableView的引用?这是因为一个viewController可以有多个tableViews,所以您需要知道哪个tableView需要东西。

  3. cellForRowAtIndexPath:tableView为委托提供了更多信息,可帮助其满足请求。它告诉viewController单元的indexPath。这样,例如,如果您有一个NSArray作为tableView的数据,则将知道要显示在tableViewCell上的数据的索引。

如果您有兴趣,阅读更多内容-https: //developer.apple.com/library/ios/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/WorkingwithProtocols/WorkingwithProtocols.html

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章