tableView.delegate = ...
tableView.dataSource = ...这两句就告诉tableView 去哪找delegate 方法 和数据。

解决方案 »

  1.   


    我也知道这二句可以告诉tableview·去哪找,可是这是个什么机制呢,是怎么实现的呢?
    假如让我写一个tableview,我一点思路都没有该怎么实现设置了delegate后tableview自己能懂得调用哪个方法
      

  2.   

    设置完代理后 
     self.delegate xxx 会调用相关方法指针指向到代理 代理对象就是本身,然后就是调用本身的方法了  
      

  3.   

    这个问题问的不错,我刚从其他语言转过来的时候也不是很明白,后来认证研究了代理和协议之后才理解的你先不要从语法上去理解这个问题,你就想响一下你真实世界中要用笔和尺子画表格是怎么个画法就可以理解了
    1.你心里可能已经准备好了表格要显示的是什么数据(不然你就不会来画表格了)
    2.你肯定要先确定你这个表格要画多少行
    3.你心里肯定会知道表格里要填充什么,所以你画表格的时候会估计一下每一行的高度
    4.画好之后你就会在每个格子里填上你想要的数据是这样的吧,那么现在套到uitableview上就很容易理解,你就当做有一个人(这个人名字叫uitableview)在帮你画表格,你只要一直告诉他需要的东西就行1.你要先准备好你要显示在表格里的数据,一般来说都是一个NSArray的数组
    2.uitableview先会问要画多少行(具体问谁就是你tableView.dataSource =设置的对象),正常情况下你准备的数据都要画出来,所以一般就直接返回[NSArray count],回答的方式就是实现datasouce协议中的-(NSInteger)tableView:(UITableView *)tableView numberOf...方法,这个方法返回的是一个整形,也就是告诉uitableview要画多少行,我们要把数据全部画出来就直接return [NSArray count]就好了
    3.uitableview画表格的顺序是先把表格画好,所以他在画没一行的时候都会问你一下:"这一行要画多高?",那么你就要告诉他要画多高,具体回答的方式就是实现-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath这个方法,你可以看到这个方法返回的是一个浮点数,就是你要画的这一行的高,如果是每一行一样高,你只要直接返回一个固定值就行了,不然的话你可以根据indexPath判断当前画到哪一行,给个指定的高度.
    4.填充数据也是类似...这么说只是想让你跟容易理解代理和协议的工作方式,也只是我个人的一个理解,如果有什么不对或者给你造成什么困扰请见谅
      

  4.   

    再稍微总结一下,uitableview就是你要画表格的代理,他画表格的时候会有一些问题会问题你,具体会问你哪些问题就是由协议来决定的,ios很多控件都是通过这种方式来实现的,所以你在使用之前就一定要弄清楚这个控件所遵循的协议方法(就是先弄明白他会提哪些问题),然后一个个实现这些协议方法就行了,也就是相当于回答问题的过程
      

  5.   

    45楼不错,,,tableView.delegate = self
    tableView.dataSource = self
      

  6.   

    理解了,谢谢各位。因为设置了delegate,datasource的原因,tableview内部会调用delegate、datasource的方法,就会知道从哪里获取数据,该实现什么操作了