编辑UITableView

作者: 水无月之痕 | 来源:发表于2019-07-31 18:51 被阅读0次

UITableView有一个名为editing的属性,如果将editing属性设置为YES,UITableView就会进入编辑模式。在编辑模式下,用户可以管理UITableView中的表格行,例如之前提到的添加、删除和移动等操作。但是编辑模式没有提供修改行的内容的功能。
  首先需要更新界面,使用户可以将UITableView对象设置为编辑模式。本章是为UITableView对象的表头视图(headerview)增加一个按钮,然后通过点击按钮使UITableView对象进入或退出编辑模式。表头视图是指UITableView对象可以在其表格上方显示的特定视图,适合放置针对某个表格段或整张表格的标题和控件。表头视图可以是任意的UIView对象。
  表头视图有两种,分别针对表格段和表格。类似地,还有表尾视图(footerview),也具有表格段和表格两种。

使用NSBundle类可以载入指定的XIB文件。该类是“应用程序包”和“应用程序包所包含的可执行文件”之间的接口。通过该类,应用可以访问某个程序包中的文件。向该类发送mainBundle消息可以得到指向主NSBundle对象的指针,该对象是应用在启动时创建的。

如果使用nib加载界面,系统会使用loadView自动加载关联好的nib文件,手动代码加载界面需要覆盖父类的loadView代码,并且自己写创建界面的方法。

如果XIB文件名和controller文件名不一样,无法自动调用loadView加载nib文件,需要自己手动加载。
而什么时候适合加载?建议按需要用到时候手动加载。这方法使用了一种名为延迟实例化(LazyInstantiation)的设计模式:只会在真正需要使用某个对象时再创建它。在某些情况下,这种设计模式可以显着减少内存占用。
  调用loadNibNamed:owner:options:时,需要传入XIB文件的文件名。文件名不需要包含后缀,NSBundle会自行判断并处理。此外,这段代码将self作为owner实参(拥有者)传给了NSBundle对象,self替换占位符对象File'sOwner。
  UIViewController默认已经实现了通过XIB文件载入视图的功能(函数loadView)。其实现原理和headerView方法的相同,代码也相似。唯一的差别是,UIViewController对象会在载入XIB文件后,将插座变量view关联至XIB文件中指定的UIView对象。

切换编辑模式

虽然可以直接通过设置UITableView对象的editing属性来切换编辑模式,但是UITableViewController也有一个从UIViewController继承而来的editing属性。当某个UITableViewController对象的editing属性发生变化时,UITableViewController对象会同步修改其UITableView对象的editing属性。
  向某个UIViewController对象或UIViewController子类对象发送setEditing:animated:消息,可以设置该对象的editing属性(UITableViewController覆盖了UIViewController的setEditing:animated:方法)。

增删移行
//创建NSIndexPath对象,代表的位置是:第一个表格段,数据的index 
NSIndexPath* indexPath = [NSIndexPath indexPathForRow:dataIndexNumber inSection:0];  //将新行插入UITableView对象  
[self.tableView insertRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationTop];

之后需要更新dataSource新一行的数据源,不然会崩溃。这里需要重点指出,视图的责任是将模型对象中的数据呈现给用户,只更新视图而不更新模型对象就会发生数据不一致的错误。

removeObjectIdenticalTo:/removeObject:移除NSArray的数据。
  这两个方法的差别是,removeObject:会枚举数组,向每一个对象发送isEqual:消息。isEqual:的作用是判断当前对象和传入对象所包含的数据是否相等(返回YES或NO)。不同的类可以根据自身情况覆盖isEqual:并实现相应的逻辑。以BNRItem为例,当两个BNRItem对象的valueInDollars相等时,可以认为这两个对象是相等的。
  removeObjectIdenticalTo:方法不会比较对象所包含的数据,只会比较指向对象的指针。因此,该方法只会移除数组所保存的那些和传入对象指针完全相同的指针。
 在编辑模式下,UITableViewCell对象可能会显示中间有个减号的红色圆圈。这个红色圆圈是删除控件(deletioncontrol),按下删除控件可以删除其所属的那个表格行。

- (void)tableView:(UITableView*)tableView  
commitEditingStyle:(UITableViewCellEditingStyle)editingStyle  
forRowAtIndexPath:(NSIndexPath*)indexPath  
{  
    //如果UITableView对象请求确认的是删除操作……  
    if(editingStyle == UITableViewCellEditingStyleDelete)  
    {    
        ...//删除数据库
        //还要删除表格视图中的相应表格行(带动画效果)
        ...//删除视图    
        [self.tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];    
    }  
}

//编辑模式下,移动是本有功能,会触发这个协议方法,随后请自行在返回处,更新相关数据。
- (void)moveItemAtIndex:(NSUInteger)fromIndex toIndex:(NSUInteger)toIndex;

相关文章

  • iOS_UI_11_UITableView的编辑

    第十一章 UITableView的编辑 一、UITableView编辑 二、UITableViewController

  • iOS 之UITableView编辑

    一. UITableView编辑 UITableView编辑步骤:a.让tableView处于编辑状态 b.确定哪...

  • UITableView--iOS笔记摘录

    UITableView 概念 UITableView的常用方法 UITableView代理方法 常用 选中 编辑(...

  • UITableView 编辑模式详解

    UITableView 编辑模式详解 UITableView的相关编辑操作非常全,今天我们来做一个总结。跟编辑相关...

  • 编辑 UITableView

    对 UITableView 的常见操作包括增加行、删除行和移动行等操作,效果图如下: NSBundle 指定 XI...

  • UITableView 编辑

    - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NS...

  • 编辑UITableView

    UITableView有一个名为editing的属性,如果将editing属性设置为YES,UITableView...

  • UITableView编辑模式详解

    转载:UITableView 编辑模式详解作者:秋刀生鱼片 UITableView的相关编辑操作非常全,今天我们来...

  • UITableView 编辑模式

    UITableView 编辑模式 相关方法 UITableView 插入、删除和移动表格的行和分区 (Insert...

  • cell左滑删除等操作

    //让tableView可编辑 - (BOOL)tableView:(UITableView*)tableView...

网友评论

    本文标题:编辑UITableView

    本文链接:https://www.haomeiwen.com/subject/lpnzrctx.html