UITableView 使用总结

转载自http://www.devdiv.com/home.php?mod=space&uid=18486&do=blog&id=6138



UITableView 使用总结

已有 169 次阅读 2011-11-1 17:29 |个人分类:object-c/iphone| 展示代理开发

UITableView是iOS开发中,使用最广泛的组件之一。通常都用它来展示一列数据,如果和NavigationController结合,就能方便的展示层次化得数据,比如Contacts。

使用UITableView,需要为它提供两个代理类,一个是UITableViewDataSource,用来给TableView提供数据; 另一个是UITableViewDelegate,控制TableView的展示方式以及事件响应。

Protocol UITableViewDataSource

实现UITableViewDataSource的代理类,必须实现三个方法:

  1. (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
  2. (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
  3. (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
  4. 示例代码:

    - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
         return [regions count];
    }
     
    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
         // Number of rows is the number of time zones in the region for the specified section.
         Region *region = [regions objectAtIndex:section];
         return [region.timeZoneWrappers count];
    }
     
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
         static NSString *MyIdentifier = @"MyIdentifier" ;
         UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];
         if (cell == nil) {
             cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:MyIdentifier] autorelease];
         }
         Region *region = [regions objectAtIndex:indexPath.section];
         TimeZoneWrapper *timeZoneWrapper = [region.timeZoneWrappers objectAtIndex:indexPath.row];
         cell.textLabel.text = timeZoneWrapper.localeName;
         return cell;
     
    }

    方法一返回TableView的Section的数据, 方法二返回每一个section有的row的数据, 方法三给每一个row返回一个TableViewCell,因为TableView只有一例。

    默认的TableViewCell可以设置一个image,一个text, 一个subtitle。但是显示什么数据还取决与当前这个TableViewCellStyle。

    UITableViewDataSource的其他常用方法示例:

    //设置section tital

    - (NSString *)tableView:(UITableView *)tableViewtitleForHeaderInSection:(NSInteger)section{

    return @"taiyang";

    }


    待续!!!!

    Protocal UITableViewDelegate

    UITableViewDelegate用来管理Row的选择和编辑。

    1. tableView:willSelectRowAtIndexPath:
    2. tableView:didSelectRowAtIndexPath:
    3. tableView:willDeselectRowAtIndexPath:
    4. tableView:didDeselectRowAtIndexPath:

    此四个方法管理Row的选择. 例如willSelectRowAtIndexPath, 如果此方法返回nil,那么所属的row将无法被选中。

    1. tableView:willBeginEditingRowAtIndexPath:
    2. tableView:didEndEditingRowAtIndexPath:
    3. tableView:editingStyleForRowAtIndexPath:
    4. tableView:targetIndexPathForMoveFromRowAtIndexPath:toProposedIndexPath:

    此四个方法在编辑Row时会被触发。editingStyleForRowAtIndexPath决定Row是否可以被编辑,删除或者移动。targetIndexPathForMoveFromRowAtIndexPath则在移动Row时会把触发,在交换Row位置的时候,必须同时交换DataSource中数据的位置。


    UITableViewDelegate 其他常用方法示例:

    //行缩进

    -(NSInteger)tableView:(UITableView *)tableViewindentationLevelForRowAtIndexPath:(NSIndexPath *)indexPath{NSUInteger row = [indexPath row]; 

    return row;

    //改变行的高度 

    - (CGFloat)tableView:(UITableView *)tableViewheightForRowAtIndexPath:(NSIndexPath *)indexPath{ 

    return 40

    }


    待续!!!!

    UITableView  section 头委托view

    //section头委托view

    - (UIView *)tableView:(UITableView *)tableViewviewForHeaderInSection:(NSInteger)section{

     if (section == 0) {

     tableView.sectionHeaderHeight = 100;

     //创建一个视图(v_headerView

     UIView *v_headerView = [[UIView alloc]initWithFrame:CGRectMake(00320100)];

     //创建一个UIimageViewv_headerImageView

     UIImageView *v_headerImageView = [[UIImageView alloc]initWithFrame:CGRectMake(00320100)];

     //v_headerImageView设置图片

     v_headerImageView.image = [UIImage imageNamed:@"icon_test.png"];

     //v_headerImageView添加到创建的视图(v_headerView)中

     [v_headerView addSubview:v_headerImageView];

     //释放v_headerImageView所占用的资源

     [v_headerImageView release];

     //创建一个UILablev_headerLab)用来显示标题

     UILabel *v_headerLab = [[UILabel alloc]initWithFrame:CGRectMake(10110019)];

     //设置v_headerLab的背景颜色

     v_headerLab.backgroundColor = [UIColor clearColor];

     //设置v_headerLab的字体颜色

     v_headerLab.textColor = [UIColor grayColor];

     //设置v_headerLab的字体样式和大小

     v_headerLab.font = [UIFont fontWithName:@"Arial" size:13];

     //设置v_headerLab的字体的投影

     v_headerLab.shadowColor = [UIColor whiteColor];

     //设置v_headerLab的字体投影的位置

     [v_headerLab setShadowOffset:CGSizeMake(01)];

     //设置每组的的标题

     v_headerLab.text = @"测试数据";

     //将标题v_headerLab添加到创建的视图(v_headerView)中

     [v_headerView addSubview:v_headerLab];

     //释放v_headerLab所占用的资源

     [v_headerLab release];

     //将视图(v_headerView)返回

     return v_headerView;

     }

     else{

      return nil;

      }

    }





    想要详细了解如何使用TableView的最好的地方当然是Apple Developer官方的文档。Table View in iOS Applications

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值