博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UITableView, 表视图
阅读量:4603 次
发布时间:2019-06-09

本文共 9976 字,大约阅读时间需要 33 分钟。

UITableView, 表视图

 

    样式

    1.UITableViewStylePlain, 正常样式

    2.UITableViewStyleGrouped,  分组样式

行高, 默认44    tableView.rowHeight = 80;    分隔线的颜色    tableView.separatorColor = [UIColor orangeColor];    tableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine;    分隔线间距(上 左 下 右)    tableView.separatorInset = UIEdgeInsetsMake(0, 0, 0, 0);    表头(重在显示内容)    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 375, 40)];    label.text = @"表        头";    label.backgroundColor = [UIColor colorWithRed:1.000 green:0.999 blue:0.599 alpha:1.000];    tableView.tableHeaderView = label;    label.textAlignment = NSTextAlignmentCenter;    [label release];    表尾(重在去除虚拟行数)//    UIView *footerView = [[[UIView alloc] initWithFrame:CGRectZero] autorelease];//    footerView.backgroundColor = [UIColor colorWithRed:0.741 green:1.000 blue:0.836 alpha:1.000];//     [footerView release];//    UIView *footerView = [[UIView new] autorelease];    tableView.tableFooterView = [[UIView new] autorelease];

 附加视图样式

    UITableViewCellAccessoryNone, 无

    UITableViewCellAccessoryDisclosureIndicator, >

UITableViewCellAccessoryDetailDisclosureButton, ! + > UITableViewCellAccessoryCheckmark, √ UITableViewCellAccessoryDetailButton, !
数值数据源, 由谁为tableView提供数据    tableView.dataSource = self;
- (void)createData {    1.数组 + 字典//    NSDictionary *person1 = @{@"name": @"陈强", @"Phone": @"15776995908"};//    NSDictionary *person2 = @{@"name": @"蹦蹦", @"Phone": @"18336394321"};//    NSDictionary *person3 = @{@"name": @"炳焱", @"Phone": @"15238841866"};//    //    self.personArray = [NSMutableArray arrayWithObjects:person1, person2, person3, nil];    2.数组 + 数据模型//    Person *p1 = [Person personWithName:@"小强" teleNumber:@"15776995908"];//    Person *p2 = [Person personWithName:@"阿呆" teleNumber:@"14646546486"];//    Person *p3 = [Person personWithName:@"阿狸" teleNumber:@"74641356413"];//    //    self.personArray = [NSMutableArray arrayWithObjects:p1, p2, p3, nil];    3.分区数据    //分区1    Person *p1 = [Person personWithName:@"阿强" teleNumber:@"15776995908"];    Person *p2 = [Person personWithName:@"阿呆" teleNumber:@"14646546486"];    Person *p3 = [Person personWithName:@"阿狸" teleNumber:@"74641356413"];    NSMutableArray *array1 = [NSMutableArray arrayWithObjects:p1, p2, p3, nil];    //分区2    Person *p4 = [Person personWithName:@"包强" teleNumber:@"15776995908"];    Person *p5 = [Person personWithName:@"保呆" teleNumber:@"14646546486"];    Person *p6 = [Person personWithName:@"宝狸" teleNumber:@"74641356413"];    Person *p7 = [Person personWithName:@"豹虎" teleNumber:@"54666566583"];    NSArray *array2 = @[p4, p5, p6, p7];    //分区3    Person *p8 = [Person personWithName:@"超强" teleNumber:@"15776995908"];    Person *p9 = [Person personWithName:@"超呆" teleNumber:@"14646546486"];    Person *p10 = [Person personWithName:@"曹狸" teleNumber:@"74641356413"];    Person *p11 = [Person personWithName:@"曹虎" teleNumber:@"54666566583"];    Person *p12 = [Person personWithName:@"超期" teleNumber:@"54666566583"];    NSArray *array3 = @[p8, p9, p10, p11, p12];    self.personArray = [NSMutableArray arrayWithObjects:array1, array2, array3, nil];        self.navigationItem.title = @"表视图";    self.navigationItem.rightBarButtonItem = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:(UIBarButtonSystemItemRefresh) target:self action:@selector(refresh)] autorelease];    }- (void)refresh {    NSMutableArray *array = self.personArray[0];    if ([self.personArray[0] count] > 0) {         [array removeObjectAtIndex:0];    //tableView的数据源发生变化, tableView不会跟着变化, 需要刷新一下tableView    UITableView *tableView = (UITableView *)[self.view viewWithTag:1028];    //重新加载数据    [tableView  reloadData];    }}
Person.m#import "Person.h"@implementation Person- (void)dealloc {    [_name release];    [_teleNumber release];    [super dealloc];}- (instancetype)initWithName:(NSString *)name teleNumber:(NSString *)teleNumber {    self = [super init];    if (self) {        self.name = name;        self.teleNumber = teleNumber;    }    return self;}+ (instancetype)personWithName:(NSString *)name teleNumber:(NSString *)teleNumber {        return [[Person alloc] initWithName:name teleNumber:teleNumber];}- (NSString *)description{    return [NSString stringWithFormat:@"name:%@ teleNumber:%@", _name, _teleNumber];}@end

#pragma mark - UITableViewDataSource分区个数, 默认为1- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {    return self.personArray.count;}分区行数- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {    return [[self.personArray objectAtIndex:section] count];}cell的创建当要显示一个cell的时候, 就会执行此方法- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {//    NSLog(@"%s", __FUNCTION__);        NSIndexPath, 继承于NSObject, 用于存储cell的位置(分区和行数)//    NSLog(@"%ld, %ld", indexPath.section, indexPath.row);        UITableViewCell, 单元格, 继承于UIView, 用于展示数据    样式    1.Default: 左imageView, 右textLabel    2.value1: 左imageView, 中textLabel, 右detailTextLabel    3.value2: 左textLabel, 右detailTextLabel    4.subtitle: 左imageView, 右上textLabel, 右下detailTextLabel    UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:(UITableViewCellStyleSubtitle) reuseIdentifier:@"辉哥好帅"];    cell.textLabel.text = [NSString stringWithFormat:@"%ld, %ld", indexPath.section, indexPath.row];    cell.imageView.image = [UIImage imageNamed:@"li.jpg"];    cell.detailTextLabel.text = @"我喜欢桃子";    cell.contentView.backgroundColor = [UIColor colorWithRed:0.665 green:1.000 blue:0.962 alpha:1.000];    accessoryView, 附加视图//    cell.accessoryView =    附加视图样式    UITableViewCellAccessoryNone, 无    UITableViewCellAccessoryDisclosureIndicator, >    UITableViewCellAccessoryDetailDisclosureButton, ! + >    UITableViewCellAccessoryCheckmark, √    UITableViewCellAccessoryDetailButton, !    cell.accessoryType = UITableViewCellAccessoryDetailButton;    return [cell autorelease];    重用机制创建cell    指定重用标识符    static NSString *string = @"慧慧";    根据重用标识符, 去重用池中找cell    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:string];   判断是否找到cell    if (cell == nil) {        没有cell, 创建cell        cell = [[[UITableViewCell alloc] initWithStyle:(UITableViewCellStyleSubtitle) reuseIdentifier:string] autorelease];        NSLog(@"+++");    }    cell赋值//    cell.imageView.image = [UIImage imageNamed:@"li.jpg"];//    cell.textLabel.text = @"你是我心中的玫瑰花";    1    NSDictionary *dic = [self.personArray objectAtIndex:indexPath.row];;    cell.textLabel.text = [dic objectForKey:@"name"];    cell.detailTextLabel.text = [dic objectForKey:@"Phone"];    2    Person *person = [self.personArray objectAtIndex:indexPath.row];    cell.textLabel.text = person.name;    cell.textLabel.text = [[self.personArray objectAtIndex:indexPath.row] name];    cell.detailTextLabel.text = person.teleNumber;    NSArray *array = self.personArray[indexPath.section];    Person *person = array[indexPath.row];    cell.textLabel.text = person.name;    cell.detailTextLabel.text = person.teleNumber;        //返回cell    return cell;}区头标题- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {    NSArray *titleArray = @[@"  A", @"  B", @"  C"];    return titleArray[section];}区尾标题- (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section {    return @"";}分区索引标题- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView {    return @[@"A", @"B", @"C"];}

 

设置代理, 检测tableView    tableView.delegate = self;

 

#pragma mark - UITableViewDelegate- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {    NSLog(@"%ld %ld", indexPath.section, indexPath.row);    DetailViewController *detailVC = [[DetailViewController alloc] init];    //赋值    detailVC.person = self.personArray[indexPath.section][indexPath.row];    [self.navigationController pushViewController:detailVC animated:YES];    [detailVC release];}@end
DetailViewController.m#import "DetailViewController.h"#import "Person.h"@interface DetailViewController ()@end@implementation DetailViewController- (void)dealloc {    [_person release];    [super dealloc];}- (void)viewDidLoad {    [super viewDidLoad];        self.view.backgroundColor = [UIColor colorWithRed:0.632 green:1.000 blue:0.968 alpha:1.000];    self.name 和 _name 的使用场景    1.赋值时, 使用self.name = @"zhangsan", self.name会调用setter方法, setter方法内部会处理(retain, copy);    2.取值时, 使用_name, 如果使用self.name, 会调用getter方法, getter方法返回_name, 和直接使用_name是一样, 并且直接使用_name效果会更高一些    self.navigationItem.title = @"联系人";        UILabel *nameLabel = [[UILabel alloc] initWithFrame:CGRectMake(50, 100, 275, 40)];    nameLabel.backgroundColor = [UIColor whiteColor];    nameLabel.text = [NSString stringWithFormat:@" 姓名: %@", _person.name];    [self.view addSubview:nameLabel];    [nameLabel release];        UILabel *phoneLabel = [[UILabel alloc] initWithFrame:CGRectMake(50, 170, 275, 40)];    phoneLabel.backgroundColor = [UIColor whiteColor];    phoneLabel.text = [NSString stringWithFormat:@" 电话: %@", _person.teleNumber];    [self.view addSubview:phoneLabel];    [phoneLabel release];}- (void)didReceiveMemoryWarning {    [super didReceiveMemoryWarning];    // Dispose of any resources that can be recreated.}@end

UITableView的创建

1.开辟空间, 设置frame, 指定样式

2.设置属性(行高, 分隔线, 表头, 表尾)

3.添加到父视图

4.释放 

UITableView的结构

一个UITableView有一个tableHeaderView, 一个tableFooterView, 多个section

一个section有多个UITableViewCell, 一个区头, 一个区尾

一个UITableViewCellcontentViewaccessoryView, 其中contentViewimageView, textLabel, detailTextLabel

UITableView, 如何展示数据

1.设置dataSource

2.遵守协议<UITableViewDataSource>

3.实现协议方法, 其中有连个方法是required(分区行数, cell的创建)

通过重用机制创建cell

1.重用标识符(static)

2.tableView根据重用标识符去复用池中找cell

3.判断是否找到cell, 如果没有找到cell, 就创建cell

4.cell展示数据

5.返回cell

UITableViewDataSource中的方法

1.分区个数

2.分区的行数

3.创建cell

4.区头标题

5.区尾标题

6.分区索引标题

UITableViewDelegate中的方法

1.选中某一行

如何为UItableView提供数据源

数组 + 字典 + 自定义类

: 当数据源发生变化时, tableView不会跟着改变, 需要重新加载tableView(reloadData)

 

 

转载于:https://www.cnblogs.com/OrangesChen/p/4926074.html

你可能感兴趣的文章
java9系列(九)Make G1 the Default Garbage Collector
查看>>
QAQ高精度模板笔记√
查看>>
Jmeter计数器的使用-转载
查看>>
【Android笔记】入门篇02:全屏设置和禁止横屏竖屏切换
查看>>
Kubernetes的本质
查看>>
PL/SQL developer 管理多套数据库
查看>>
黑马程序员-分类(category)
查看>>
vue-cli多页面
查看>>
进程和线程
查看>>
iOS Foundation框架简介 -1.常用结构体的用法和输出
查看>>
libevent reference Mannual I
查看>>
eclipse创建Maven父子结构Maven项目
查看>>
Python 太糟糕了?开发者总结了 8 大原因
查看>>
Spring中注入基本类型
查看>>
脚本方式安装 IIS7
查看>>
Oracle password expire notices
查看>>
发现“郝茵晴”:屌丝们的社会性传播实验
查看>>
WordPress优化:为网站添加个性化缩略图标
查看>>
shell脚本分析IP归属地
查看>>
CITRIX XenAPP/TS打印管理ThinPrint.
查看>>