iOS学习之UItableView

一些相关的总结,有点乱.

  •  UITableViewiOS中提供的用来以列的形式展示数据的视图,叫做表现图,但是只有一列,而且只能在垂直方向滚动.继承自UIScrollView.
  •  UITableView由多个分区组成(相当于班级的分组),每个分区由多行组成(相当于每个分组下的人).
  •  UITableView有两种样式,PlainGroup样式,一旦设置之后,后期不能更改. 

 


 

继承自UITableViewController 继承自UIViewController的区别. (UITableViewControllerUIViewController的子类)

  • .前者根视图是tableView, 而后者根视图是UIView. 前者不需要指定dataSource,delegate.服从协议. 而后者需要.
  • 前者不需要重写setEditing:animated:方法控制tableView进入编辑状态,而后者需要自己实现.
  • 前者对于UITableViewDataSource协议中的常用方法已经自动生成,而后者需要自己添加对应的方法.

何时需要继承自UITableViewController?

    当前页面信息的展示主要是以列的形式来展示的场景下, 都可以直接继承自UITableViewController.

    在继承自UITableViewController的视图控制器中访问tableView.

    1.self.view  根视图就是tableView.

    2.self.tableView 有对应的tableView属性.


UITableView协议中的一些方法

UITableViewDataSource协议

  1.配置TableView一共有几个分组

  - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView;

  2.配置tableView每个分区对应的行数

    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;

    3.配置用来显示每一行数据的cell.(UITableViewCell)

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {//1.创建重用标识符.static NSString *identifier = @"heihei";//2.根据重用标识符去重用队列中取可重用的cell.UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];//3.判断是否成功取到可重用的cell.cell是否为空.if (!cell) {//4.cell为空,说明没有成功取到cell.则创建一个cell.cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:identifier] autorelease];cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; //辅助视图样式,小箭头
    }NSDictionary *dic = self.addressDic[self.sortedKeys[indexPath.section]][indexPath.row];cell.textLabel.text = dic[@"name"];cell.detailTextLabel.text = dic[@"phone"];cell.imageView.image = [[UIImage imageNamed:dic[@"imageName"]] scaleToSize:CGSizeMake(40, 40)];return cell;
}

 

    4.配置每个分区的页眉 

    - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section;

    5.配置tableView右侧的分区索引

    - (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView;

    //编辑相关的协议方法

    6.设置tableView的哪些行可以允许编辑

    - (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath;

    7.提交编辑操作时触发(默认的时删除操作)

    - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath;

//提交编辑操作, 对删除操作作出处理.
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {//总共分两步:1.修改数据源 2.修改界面//1.获取删除行对应的分区key.(是B分组,还是C分组)NSString *key = self.sortedKeys[indexPath.section];//2.根据key获取对应的可变数组.NSMutableArray *group = self.addressDic[key];if (editingStyle == UITableViewCellEditingStyleInsert) {//处理插入操作//1.修改数据源NSDictionary *dic = @{@"name":@"Frank", @"age":@"18", @"gender":@"man", @"phone":@"110", @"imageName":@""};[group insertObject:dic atIndex:indexPath.row];//2.修改界面
        [tableView insertRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationRight];} else {//处理删除操作//需要判断是否要删除一个分区.if (group.count == 1) {//删除分区//1.修改数据源//从字典中根据key移除对应的元素.
            [self.addressDic removeObjectForKey:key];//从排好序的key值数组中移除对应的key.
            [self.sortedKeys removeObject:key];//2.修改界面NSIndexSet *indexSet = [NSIndexSet indexSetWithIndex:indexPath.section];[tableView deleteSections:indexSet withRowAnimation:UITableViewRowAnimationRight];} else {[group removeObjectAtIndex:indexPath.row]; //删除行对应的字典.//删除界面上的一行.
            [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationRight];}}
}

 

    //移动相关的协议方法

    8.设置tableView哪些行可以允许移动

    - (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath;

    9.提交移动操作触发.

    - (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath;

//提交移动操作.
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath {//因为移动操作界面已经发生变化,我们只需要修改数据源即可.//1.获取到分区对应的数组.NSMutableArray *group = self.addressDic[self.sortedKeys[sourceIndexPath.section]];//分区对应的数组//2.将原位置对应的元素取出来保存.NSDictionary *dic = [group[sourceIndexPath.row] retain]; //retain 引用计数加1, 否则移除时就造成引用计数为0,空间回收了.//3.将原位置对应的元素删除掉.
    [group removeObjectAtIndex:sourceIndexPath.row];//4.将保存的元素插入到目的位置.
    [group insertObject:dic atIndex:destinationIndexPath.row];//5.释放所有权
    [dic release];
}

 

 

  UITableViewDelegate协议

    1.当tableView的行被选中时触发

    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath;

    2.tableView的行被取消选中时触发

 

    - (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath;

    3.配置tableView某一行的高度

    - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;

    //编辑相关

    4.设置tableView的编辑样式

    - (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath;

    5.设置删除时确认按钮的标题.

    - (NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath;

    //移动相关

    6.设置tableView限制跨区移动

    - (NSIndexPath *)tableView:(UITableView *)tableView targetIndexPathForMoveFromRowAtIndexPath:(NSIndexPath *)sourceIndexPath toProposedIndexPath:(NSIndexPath *)proposedDestinationIndexPath;

- (NSIndexPath *)tableView:(UITableView *)tableView targetIndexPathForMoveFromRowAtIndexPath:(NSIndexPath *)sourceIndexPath toProposedIndexPath:(NSIndexPath *)proposedDestinationIndexPath {//sourceIndexPath 移动之前的位置//proposedDestinationIndexPath 即将要移动到的位置if (sourceIndexPath.section == proposedDestinationIndexPath.section) {return proposedDestinationIndexPath;}return sourceIndexPath;}

 

 


 

UITableView编辑步骤:

    1.在导航条上添加Edit按钮. 重写setEditing:Animated:方法.

self.navigationItem.rightBarButtonItem = self.editButtonItem;

 

    2.控制tableView的可编辑状态.

    3.设置tableView的哪些行可以允许编辑. (dataSource)

    4.设置编辑样式. (delegate)

    5.提交编辑操作. (dataSource) (1)修改数据源 (2)修改界面


 

转载于:https://www.cnblogs.com/ErosLii/p/4498881.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/431799.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

iptables 开放远程_远程FX正式上市 指导价11.99万-12.99万元_搜狐汽车

本文车型速览除了文章作者的主观观点外,我们正尝试基于全网可查的客观数据,为您提供中立、客观的参考依据:本文部分车型速览:畅销车型质量排行top10展开微信扫码,直接一次看完附近所有城市低价(附近城市均有经销商可售…

线性回归的Spark实现 [Linear Regression / Machine Learning / Spark]

1- 问题提出 2- 线性回归 3- 理论推导 4- Python/Spark实现 1 # -*- coding: utf-8 -*-2 from pyspark import SparkContext3 4 5 theta [0, 0]6 alpha 0.0017 8 sc SparkContext(local)9 10 def func_theta_x(x): 11 return sum([i * j for i, j in zip(theta, x)]) 1…

matlab项目实例教程,matlab简明实例教程.doc

matlab简明实例教程.doc 南京航空航天大学王正盛1MATLAB数学工具软件实例简明教程王正盛编写南京航空航天大学南京航空航天大学王正盛2第一章MATLAB简介MALAB译于矩阵实验室MATrixLABoratory是用来提供通往LINPACK和EISPACK矩阵软件包接口的后来它渐渐发展成了通用科技计算图视…

pointcut 排除_宁河天津玻璃门地弹簧玻璃门故障排除

宁河天津玻璃门地弹簧玻璃门故障排除门扇玻璃应用钢丝卡固定。安装完毕要做好安装后的清洁工作.相关概念钢化玻璃钢化玻璃(Temperedglass/Reinforcedglass)属于安全玻璃。钢化玻璃其实是一种预应力玻璃,为提高玻璃的强度,通常使用化学或物理的方法&#…

四则运算心得

#include<stdio.h>#include<math.h>#include<windows.h>int right0;int wrong0;void add(){int a,b,c;arand()%100;brand()%100;printf("请回答&#xff1a;\n\t\t %d %d ",a,b);scanf("%d",c);if(abc){printf("回答正确!\n"…

php中一级标题和二级标题,什么是一级标题,一二三标题格式举例

什么是一级标题什么是一流的标题&#xff0c;第一级标题是讨论的第一个内容&#xff0c;如序言&#xff1b;一级标题通常指序号为[I&#xff0c;]的标题&#xff0c;也是最大的标题它是4号黑体&#xff0c;单行无标点符号&#xff1b;二级标题是指序号为[(1)]的标题&#xff0c…

mac安装win10_mac制作win10启动盘教程

在Mac系统环境下如何制作win 10 启动盘呢&#xff1f;把win 10 系统安装在U盘里&#xff0c;这样不仅可以重启后单独运行&#xff0c;还可以在Mac的虚拟机里面来引导启动它&#xff0c;那么mac制作win10启动盘工具需要什么软件呢&#xff0c;接下来macdown 小编给大家带来了mac…

Java-ArrayList和Vector的区别

这两个类都实现了List接口&#xff08;List接口继承了Collection接口&#xff09;&#xff0c;他们都是有序集合&#xff0c;即存储在这两个集合中的元素的位置都是有顺序的&#xff0c;相当于一种动态的数组&#xff0c;我们以后可以按位置索引号取出某个元素&#xff0c;&…

alonedb.php on line 58,SHOPEX出现\core\include_v5\AloneDB.php on line 58的解决办法

网站文章页面开&#xff0c;出现以下错误\core\include_v5\AloneDB.php on line 58等一串错误根据查资料&#xff0c;得到错误原因“shopex似乎不支持fastcgi模式(SELECT goods_id FROM sdb_goods WHERE disabled’false’ ….)于是找到解决办法(管用)如下&#xff1a;a. 找到文…

cpu工作原理flash动画_17张PLC工作原理动画,每一个都是经典

小编今天给大家带来17张PLC工作原理控制动画&#xff0c;每一个都是经典。1、PLC顺序控制顺序控制的基本思路&#xff0c;即要将设备的动作细分为单个动作步&#xff0c;每个步执行一个操作。且步与步之间通过对应的转换条件连接&#xff0c;及步动作切换。严格按照此思路&…

2015.5.21 Core Java Volume 1

如果你只想用一次的话 就是 String s new Date();如果想用多次的话 就是 Date birthday new Date();转载于:https://www.cnblogs.com/zhuyaguang/p/4518761.html

自动化要不要学python-老男孩linux自动化运维|做人工智能为什么要学Python呢?

Python是一种通用的脚本开发语言&#xff0c;比其他编程语言更加简单、易学&#xff0c;其面向对象特性甚至比Java、C#、.NET更加彻底&#xff0c;非常适合快速开发&#xff0c;Python在软件质量控制、开发效率、可移植性、组件集成、库支持等方面均处于先进地位! 中国人工智能…

druid.io 海量实时OLAP数据仓库 (翻译+总结) (1)

介绍 我是NDPmedia公司的大数据OLAP的资深高级工程师&#xff0c; 专注于OLAP领域, 现将一个成熟的可靠的高性能的海量实时OLAP数据仓库介绍给大家: druid.io NDPmedia在2014年3月就开始使用, 见链接: http://blog.csdn.net/chenyi8888/article/details/37594771 druid是个很新…

oracle数据库的浮点数,Oracle Float类型

本篇文章帮大家学习Oracle Float类型&#xff0c;包含了Oracle Float类型使用方法、操作技巧、实例演示和注意事项&#xff0c;有一定的学习价值&#xff0c;大家可以用来参考。本教程将向您介绍Oracle FLOAT数据类型&#xff0c;并演示如何将FLOAT类型应用于表定义浮点数的字段…

求合体电脑版_网红界宋祖儿找年轻版言承旭当男友,一张合照收割大量cp粉?!...

下面这组情侣写真&#xff0c;没有颜控能逃得过他们的狗粮。男生神似年轻版言承旭&#xff0c;女生像宋祖儿和章若楠的结合体。一组写真就秒到网友&#xff0c;几乎是全网求ID的程度。说到俊男美女的组合&#xff0c;这不是挖酱的业务范畴么&#xff1f;立马赶来给大家介绍一下…

什么影响oracle io,Oracle IO问题解析

3.2 数据文件相关的IO事件数据库系统中的大多数的IO请求都是针对数据文件的。因此大多数情况下&#xff0c;与数据文件相关的IO事件是引起系统IO性能的主要原因。这些事件也是我们文章需要重点介绍的事件。下面分别针对不同事件介绍问题的解决思路。3.2.1 db file sequential r…

Solarized ----vim配色方案

linux环境下成功 从csdn上下载文件&#xff0c;下载地址&#xff1a;http://download.csdn.net/detail/thisnameokbu/8728489 //切到相关目录 $cd vim-colors-solarized/colors //将solarized.vim移动到~/.vim/colors/下&#xff0c;如果~/.vim/下没有colors文件…

C++求复数的角度_人教A版高中数学必修二7.1 复数的概念优质课公开课课件、教案...

【新教材】7.1.1 数系的扩充和复数的概念 教学设计(人教A版)教材分析本节作为复数一章的开篇&#xff0c;主要包括数系概念的发展简介&#xff0c;数系的扩充&#xff0c;复数的相关概念、分类、相等条件&#xff0c;代数表示和几何意义.复数的引入是中学阶段数系的又一次扩充&…

oracle挂载到空闲进程,Oracle部分后台进程

1.PMON:后台进程负责在连接出现异常中止后进行清理工作PMON会回滚未提交的工作&#xff0c;释放锁&#xff0c;并释放之前为失败进程分配的SGA资源负责监视其它后台进程&#xff0c;并在必要时重启这些后台进程或适当的终止实例2.LREG:监听注册进程负责将数据库实例和服务注册到…

电脑屏保海底世界_炸弹测深出来的海底一万米,都藏有何种玄机?

近日&#xff0c;由中国科学院沈阳自动化研究所研制的“海斗一号”全海深自主遥控潜水器载誉归来&#xff0c;在马里亚纳海沟实现4次万米下潜&#xff0c;最大下潜深度10907米&#xff0c;刷新中国潜水器最大下潜深度纪录&#xff0c;众人赞叹“这是一个有‘深度’的潜水器&…