Quantcast
Channel: CSDN博客推荐文章
Viewing all articles
Browse latest Browse all 35570

UITableview

$
0
0

UITableView需要一个数据源(dataSource)来显示数据,UITableView会向数据源查询分区的个数、每个分区的行数以及每一行显示的数据等。没有设置数据源的UITableView只是一个空壳。凡是遵守UITableViewDataSource协议的OC对象,都可以是UITableView的数据源。

通常都要为UITableView设置代理对象(delegate),以便在UITableView触发一下事件时做出相应的处理,比如选中了某一行。凡是遵守了UITableViewDalegate协议的OC对象,都可以是UITableView的代理对象。

新建一个基于单文档应用的项目,名为TableView1。

拖一个Table View到ViewController.xib文件中,如图:


建立关联,,将Controller的view设置为Table View,如图:


设置ViewController为Table View的代理和数据源


然后在ViewController.h头文件做数据源和代理协议的声明。

//
//  ViewController.h
//  TableView1
//
//  Created by Rio.King on 13-9-6.
//  Copyright (c) 2013年 Rio.King. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController<UITableViewDataSource,UITableViewDelegate>

@end

接着在ViewController.m文件中做如下实现:

//
//  ViewController.m
//  TableView1
//
//  Created by Rio.King on 13-9-6.
//  Copyright (c) 2013年 Rio.King. All rights reserved.
//

#import "ViewController.h"

@interface ViewController ()
@property(nonatomic,retain)NSMutableArray *data;
@end

@implementation ViewController

- (void)viewDidLoad{
    [super viewDidLoad];
    
    //初始化假数据
    self.data = [NSMutableArray array];
    
    for (int i = 0; i < 20; i++) {
        NSString *text = [NSString stringWithFormat:@"Itcase-%i",i];
        [self.data addObject:text];
    }
}

- (void) dealloc{
    [super dealloc];
    [_data release];
}

- (void)viewDidUnload{
    [super viewDidUnload];
    self.data = nil;
}


#pragma mark - Data Source
//pragma mark 分区的个数
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
    return 1;
}

//pragram mark 第section分区的行数
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    return self.data.count;
}

//初始化每一行要显示的内容
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    
    UITableViewCell *cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil] autorelease];
    cell.textLabel.text = [self.data objectAtIndex:indexPath.row];
    
    return cell;
}


#pragma mark - Delegate


@end

运行结果如下:


如图,默认样式是Plain,你也可以选择Grouped,,也只有这两种样式可以选。

基本的框架就算完成了,,现在就再原有的基础上再修改一下,添加图片和其他的辅助样式。

导入一张png图片,在ViewController.m文件加一句代码即可,其它不用改动

cell.imageView.image = [UIImage imageNamed:@"home.png"];

效果如下:


默认情况下,图片的高度是多少,cell的高度就是多少,,,当然也可以通过代码改变某一cell的高度

#pragma mark - Delegate
//pragma mark indexPath对应那行的高度
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
    if (indexPath.row == 0) {
        return 80;//第一行的高度设置为100
    }
    
    return  60;//其它的cell高度设置为60
}

效果如下:



------------------------------------------------------------------------------------------------------------------------------

UITableViewCell

  • UITableView的每一行都是一个UITableCell,通过dataSource的TableView:CellForRowAtIndexPath:方法来初始化每一行
  • UITableViCell是UIView的子类,内部有个默认的子视图:contentView。contentView是UITableViewCell所显示内容的父视图,并负责显示一些辅助指示视图(accessory indicator)。辅助指示视图的作用是显示一个表示动作的图标,可以设置UITableViewCell的accessorType来显示,默认是UITalbeViewCellAccessoryNone(不显示辅助指示视图),其它的值如下:
  • UITableViewCellAccessoryDisclosureIndicator
  • UITableViewCellAccessoryDatailDisclosureButton
  • UITableViewCellAccessoryCheckmark



还有一些辅助的属性,可以设置cell的右边图标的,代码如下:

//初始化每一行要显示的内容
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    
    UITableViewCell *cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil] autorelease];
    cell.textLabel.text = [self.data objectAtIndex:indexPath.row];
    cell.imageView.image = [UIImage imageNamed:@"home.png"];
    
    //改变cell右边的辅助属性
    if (indexPath.row < 3) {
        cell.accessoryType = UITableViewCellAccessoryCheckmark;
    }
    else if (indexPath.row <7) {
        cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton;
    }
    else{
        cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
    }
    
    return cell;
}

运行效果如下:






作者:chaoyuan899 发表于2013-9-6 23:59:51 原文链接
阅读:158 评论:0 查看评论

Viewing all articles
Browse latest Browse all 35570

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>