• iOS基础


    一、UITableView的代理方法

    #pragma mark 每一行的高度

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

    #pragma mark 选中了某一行就会调用

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

    #pragma mark 取消选中了某一行就会调用

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

    #pragma mark 当用户提交了一个编辑操作就会调用(比如点击了“删除”按钮)

    // 只要实现了这个方法,就会默认添加滑动删除功能

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

    #pragma mark 当移动了某一行cell就会调用

    // 只要实现了这个方法,就会默认添加排序功能

    - (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath

    二、修改Cell的状态

    1.最好通过“修改模型数据”来修改Cell的状态

    2.修改步骤

    1> 修改模型数据

    2> 刷新表格

    整体刷新:reloadData(最重要)

    局部刷新:reloadRowsAtIndexPaths:withRowAnimation:

    三、UITableView常见方法

    1.取消选中某一行(去掉cell选中时默认的蓝色背景)

    - (void)deselectRowAtIndexPath:(NSIndexPath *)indexPath animated:(BOOL)animated;

    2.局部刷新(仅仅刷新indexPaths数组中装着的行)

    - (void)reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation

    3.整体刷新(屏幕中的每一行都刷新)

    - (void)reloadData;

    4.直接删除界面上的行数(要求模型数据也要删掉对应的数量)

    - (void)deleteRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation

    5.设置编辑模式

    @property(nonatomic,getter=isEditing) BOOL editing; 

    - (void)setEditing:(BOOL)editing animated:(BOOL)animated;

    // 注意:

    不管是局部刷新,还是整体刷新,原理都是:

    UITableView重新向数据源(dataSource)和代理(delegate)发送相应的消息,最终将得到的数据展示出来

     

     

     

     

    1.常见错误解析

    1.1

    错误原因:说ViewController 没有实现 tableView:numberOfRowsInSection:

    解决方式:实现tableView:numberOfRowsInSection:

    1.2

    UITableView内部实现原理:

    数据源实现了这个方法

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

    tableView内部自动会调用以下方法添加cell

    [tableView addSubview:cell];

    如果返回的cell为空,也就意味着生成下面一行代码。

    [tableView addSubview:nil];

    addSubview是将右边参数添加到数组中保存起来,而数组是不能添加空值的。所有集合对象都不能出传空。例如数组,字典,NSSet

    以上错误总结:作为tableView的数据源必须实现两个方法。

    返回行数

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

    返回每一行显示的内容

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

    另外返回每一行显示的内容不能返回nil

    2.淘宝界面例子思路

    UITableView开发模式都是先将数据转换为模型。

    步骤一:根据plist文件创建模型对象

    步骤二,解析plist文件,将文件中的数据转换为模型对象。

    步骤三:将模型对象用一个数组保存起来

    步骤四:实现tableView的数据源方法。(设置数据源,遵守数据源协议)

    步骤五:将字典转化为模型的操作封装到模型里面去。

    步骤六:根据设计角度的上面思考,需要实现两个方法。

    步骤七:实现tableView的代理方法。(设置代理,遵守代理协议)

    步骤八:点击某一行打钩实现步骤:

    1. 用一个数组记录住选中的模型(如果模型在数组中了就删除,没有就添加)
    2. 刷新表格

    步骤九:在返回每一行的方法中,添加一个判断来决定是否cell需要打钩

    步骤十:更改UILabel的显示

    步骤十一:监听删除按钮的点击

    1. 删除模型
    2. 刷新表格
    3. 更改标题
    4. 清空被选中模型的数组
    5. 让删除按钮不能点击

    3.事件处理补充:UILable不能处理事件。因此把UILabel放在按钮上面也能点击,他会把事件传递给下一个控件处理。

    4.刷新表格行的方法.

     使用注意:必须前后数据保持一致才能调用这些方法,否则会报错。

    -(void)reloadRowsAtIndexPaths:(NSArray*)indexPaths withRowAnimation:(UITableViewRowAnimation)animation;

    -(void)reloadSections:(NSIndexSet*)sections withRowAnimation:(UITableViewRowAnimation)animation;

    使用注意:必须数据删除多少,表格删除多少,前后数据不一致才能调用这些方法,否则会报错。

    - (void)insertRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation;

    - (void)deleteRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation;

    - (void)insertSections:(NSIndexSet *)sections withRowAnimation:(UITableViewRowAnimation)animation;

    - (void)deleteSections:(NSIndexSet *)sections withRowAnimation:(UITableViewRowAnimation)animation;

    这个刷新方法,没有限制

    - (void)reloadData;

    5.UITableView编辑模式删除功能小例子思路

    步骤一:搭建页面

    步骤二:实现数据源方法。(设置数据源,遵守数据源协议)

    步骤三:创建数据模型

    步骤四:创建数组保存数据模型

    步骤五:监听删除按钮,点击删除按钮进入编辑模式

    步骤六:改本地化

    步骤七:实现代理方法。

    当用户提交一个编辑操作就会调用。实现这个方法还会默认支持滑动删除

    1. 删除模型数据
    2. 刷新表格

    步骤八:实现排序功能

    1. 调整模型数据里的顺序
    2. 取出要拖动的模型数据
    3. 先删除要拖动的模型数据
    4. 然后将拖动的模型数据插入新的位置

    6.UITableViewCell的结构:UITableViewCell外面有一层ContentView,以后要往UITableViewCell里添加子控件,添加到ContentView上面。

    7.MVC

    模型中不能拥有控制器和视图,模型有可能用来重用的,包含控制器就不能重用了,因为模型脱离控制器就不能使用了。

    视图不能直接访问模型。

    视图和模型的联系都是通过控制器。

    控制器向模型拿到数据展示到视图上。

  • 相关阅读:
    04.安全-TLS1.2连接过程
    02.安全-证书和CA
    01.安全-加密
    00.https基本
    00.二叉树基本
    二分查找01.基本二本查找及其变种
    01.数据结构资料,时间复杂度空间复杂度(数据结构算法基本)
    从 CentOS 8 平滑迁移至 CentOS Stream
    identityserver使用记录
    vs2019 使用私钥进行连接时出错 ssh连接报错
  • 原文地址:https://www.cnblogs.com/monicaios/p/3501070.html
Copyright © 2020-2023  润新知