我对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 ....
按照这种方法,您的情况是这样的:
现在,当您分配tableView时,它知道它的委托和dataSource属性已准备就绪,因此它开始向您的对象发送消息,例如:
一个。我需要知道特定部分中有多少行-tableView:numberOfRowsInSection:
b。嘿,我需要知道这一行的高度是多少-tableView:heightForRowAtIndexPath:
C。嘿,有人告诉我当用户选择此单元格时该怎么做-tableView:didSelectRowAtIndexPath:
... 等等
另外,您注意到我是如何写下这些方法的?不只是tableView
...是tableView:cellForRowAtIndexPath:
。那就是你的方法。
空洞的头脑,尝试理解某些语法背后的原因,您将爱上所学的内容:)
抱歉,我的答案到处都是,但是您的问题很开放。
您问题的更直接答案:
(UITableViewCell *):这是返回类型。tableView要求您创建一个单元格并返回它。
tableView:(UITableView *):这是您的viewController代表的tableView。为什么要获得对tableView的引用?这是因为一个viewController可以有多个tableViews,所以您需要知道哪个tableView需要东西。
cellForRowAtIndexPath:tableView为委托提供了更多信息,可帮助其满足请求。它告诉viewController单元的indexPath。这样,例如,如果您有一个NSArray作为tableView的数据,则将知道要显示在tableViewCell上的数据的索引。
如果您有兴趣,请阅读更多内容-https: //developer.apple.com/library/ios/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/WorkingwithProtocols/WorkingwithProtocols.html
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句