【UIKit】UITableView.07 编辑模式

【1】拖动好界面

【2】设置协议,数据源

【3】代码

1.声明可变数组,用来存放所有数据对象

@interface ViewController ()
@property(nonatomic,strong)NSMutableArray *mydata;
@end

2.初始化数据【创建30个对象数据】

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.mydata=[NSMutableArray array];
    for(int i =0;i<30;i++)
    {
        NSString *str=[NSString stringWithFormat:@"it-%d",i];
        [self.mydata addObject:str];
    }
}

3.设置返回行数

#pragma mark -返回行数
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return self.mydata.count;
}


【删除方法】

1.添加固定方法,显示一个cell就调用该方法,优化性能

#pragma mark 每当有以个cell进入视野范围内就会调用,返回当前这行显示的cell
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    // 1. 用static 修饰的 局部变量,只会初始化一次
    static NSString *[email protected]"Cell";
    // 2. 拿到一个标识先去缓存池中查找对应的Cell
    UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:ID];
    // 3. 如果缓存池中没有,才需要传入一个标识创建新的Cell
    if(cell==nil)
        cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:ID];
    // 4.覆盖数据
    cell.textLabel.text=self.mydata[indexPath.row];
    [email protected]"哈哈哈";
    return cell;
}

2.这个方法是提交编辑时候调用【点击Delete,就会调用下面的方法】

#pragma mark 提交编辑时调用

// 一点击删除,就会调用这个方法/ 左滑动删除
-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSLog(@"-------commit ------%d",indexPath.row);

    // 删除数据
        // 1. 更改数据(删除本行数据)
    [self.mydata removeObjectAtIndex:indexPath.row];// 传入一个位置,将这个位置上的数据删除
        // 2.刷新数据
   // [tableView reloadData];// 数据刷新,全局刷
    [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationLeft];
}

3.调用代理方法中的监听事件,【删除】信息内容的修改

[开启编辑状态]

self.tableView.editing=YES;   
// 编辑状态
[self.tableView setEditing:YSE animated:YES];  
// 带有动画效果
#pragma  mark -代理方法
#pragma mark -监听item的点击
#pragma  mark 删除
-(IBAction)remove
{
    bool edt=self.tableView.editing; //取得现在编辑状态是否开启
    //按一下开启编辑状态
    // 没有动画效果
    //  self.tableView.editing=YES;  // 编辑状态
    [self.tableView setEditing:!edt animated:YES];  // 带有动画效果
}

【增加方法】

【1】.增加方法与删除方法类似,先创建“+”按钮的代理方法,连线

【2】.代码

  1.添加数据用的方法: [self.mydata insertObject:[添加的内容] atIndex:[添加到第几行]];

2.刷新数据: inSection 表示是组号,indexPathForRow表示的是行号

  1)获取到一个数组
   NSIndexPath *newPath=[NSIndexPath indexPathForRow:[行号] inSection:[组别号]];    
  2)传入一个数组
   [tableView insertRowsAtIndexPaths:@[newPath] 【上面的数组】withRowAnimation:UITableViewRowAnimationTop【动画效果】];
#pragma mark 提交编辑时调用(删除和添加方法都会调用该方法)

// 一点击“+”就会调用这个方法
-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{  // 增加数据
        // 1. 更改数据(删除本行数据)
        [self.mydata insertObject:@"新添加数据"atIndex:indexPath.row+1];
        // 2.刷新数据
        NSIndexPath *newPath=[NSIndexPath indexPathForRow:indexPath.row+1 inSection:0];
        [tableView insertRowsAtIndexPaths:@[newPath] withRowAnimation:UITableViewRowAnimationTop];
}
    
[tableView reloadRowsAtIndexPaths:<#(NSArray *)#>【指定行】 withRowAnimation:<#(UITableViewRowAnimation)#>]
刷新指定行的数据(个数不变)
[tableView deselectRowAtIndexPath:<#(NSIndexPath *)#> 【指定行】animated:<#(BOOL)#>【动画效果】]
删除指定行(删除后个数与数据个数保持一致)
[tableView insertRowsAtIndexPaths:@[newPath]【指定行要求数组】 withRowAnimation:UITableViewRowAnimationTop];
插入新的行

3.加入add方法

-(IBAction)add
{
    // 取出当前的编辑状态
    bool edt=self.tableView.editing;

    // 设置调用方法,方便开启编辑模式判断是否是添加
    self.tableView.tag=UITableViewCellEditingStyleInsert;

    // 开启编辑模式
    [self.tableView setEditing:!edt animated:YES];
}

4.通过上面【add】方法与【remove】方法中设置的Tag,可以获取调用移除还是增加方法。然后使用这个编辑模式。

#pragma  mark -代理方法
#pragma mark 当tableView开启编辑模式就会调用
-(UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
{
    // 通过调用add 和remove方法中的tag变量,来确定是要添加还是删除。
    return tableView.tag;
}

5.如果增加的话,最终会调用一下下面的方法,但是上面已经写了


1

2

3

4

#pragma mark 每当有以个cell进入视野范围内就会调用,返回当前这行显示的cell

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

{

}

  



【排序模式】

1.增加代码

sourceIndexPath :当前需要移动的行
destinationIndexPath :移动目标的行
#pragma mark 如果实现了这个方法,就有排序功能
-(void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath
{
 // 当从某一行一动到另外一行时,会调用该方法。
    NSLog(@"%d-->%d",sourceIndexPath.row,destinationIndexPath.row);// 这行可以说明调用步骤

    //  如果直接使用这样的方法,只是界面进行改变,数据没有改变,违反了MVC所以要用以下方法

    // 1.取出即将要删除的数据
    NSString *data =self.mydata[sourceIndexPath.row];

    // 2.删除要一动的那一行
    [self.mydata removeObject:data];

    // 插入之前删除的数据到某一行
    [self.mydata insertObject:data atIndex:destinationIndexPath.row];

}


【总结】

1.增加\删除

 一、删除\添加:
 1.开启编辑模式
 [self.tableView setEditing:YES animated:YES];

 2.实现数据源的某个方法
 tableView:commitEditingStyle:forRowAtIndexPath:

 3.下面方法的返回值决定编辑模式是添加还是删除
 - (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath

2.排序

 二、排序:
 实现下面的方法即可:
 tableView:moveRowAtIndexPath:toIndexPath:

3.刷新界面

三、4个刷新UI界面的方法
 1.添加新的行
 [tableView insertRowsAtIndexPaths:@[path] withRowAnimation:UITableViewRowAnimationTop];

 2.删除指定的行
 [tableView deleteRowsAtIndexPaths:@[path] withRowAnimation:UITableViewRowAnimationTop];

 3.局部刷新指定的行
 [tableView reloadRowsAtIndexPaths:@[path] withRowAnimation:UITableViewRowAnimationTop];

 4.整体刷新所有的行
 [tableView reloadData];

【UIKit】UITableView.07 编辑模式,布布扣,bubuko.com

时间: 2024-11-03 21:39:01

【UIKit】UITableView.07 编辑模式的相关文章

UITableView的编辑模式

UITableView可以分普通模式和Editing模式两种,这里我们着重讨论Editing模式,Editing模式中又分三种操作:Insert.Delete. Reallocted.Insert和Delete针对数据源内容的修改,而Reallocated是针对数据源位置的修改.下面分别讨论. 一.Insert Or Delete 当UITableView接收到 setEditing:animated:时,它会将同样的消息转发给每一个可见行,大致会经历如下步骤,引用至官方: The table

IOS-UITableView编辑模式示例

概要 本示例实在上篇文章的基础上的例子修改过来的,主要是简示了UITableView的编辑模式的使用,包括状态改变.移动行.删除行. 运行结果 过程概要 见代码及注释,不难 主要代码 h文件 // // CityViewController.h // NatTab // // Created by God Lin on 14/12/7. // Copyright (c) 2014年 arbboter. All rights reserved. // #import <UIKit/UIKit.h>

UITableView编辑模式

UITableView有两种模式,普通模式和编辑模式.在编辑模式下可以对cell进行排序.删除.插入等等. 如何进入编辑模式 调用tableView的setEditing(editing: Bool, animated: Bool)方法. 进入编辑模式以后发生了什么 向每个cell发送setEditing:animated:方法 进入编辑模式以后cell的变化 普通模式下cell的contentview的bounds就是cell的bounds. 编辑模式下,cell有三部分组成,左边的Editi

UITableView 编辑模式(增加-删除-移动---自定义左滑 title)

- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. self.dataArray = [NSMutableArray arrayWithArray: @[@"1",@"2",@"3",@"4",@"5",@"6"

第九章 UITableView编辑模式笔记

一,tableview自带编辑模式,可以添加.删除.移动item 二,可以添加section或者table的header和footer 三,使用interface Builder创建header的layout 四,UITableView显示header前,会向它的controller发送headerVIew消息 - (UIView *)headerView { // If you have not loaded the headerView yet... if (!_headerView) {

IOS第七天(6:UiTableView编辑模式, 拖动位置 ,滑动删除)

**********UiTableView编辑模式, 拖动位置 ,滑动删除 #import "HMViewController.h" @interface HMViewController () <UITableViewDataSource, UITableViewDelegate> /** 数据列表 */ @property (nonatomic, strong) NSMutableArray *dataList; @property (nonatomic, strong

iOS UIKit:TableView之编辑模式(3)

一般table view有编辑模式和正常模式,当table view进入编辑模式时,会在row的左边显示编辑和重排控件,如图 42所示的编辑模式时的控件布局:左边的editing control有表 61的两种图标. 表 61 table view编辑控件 图标 描述 Deletion控件 Insertion控件 若table view在编辑模式时,用户点击编辑控件,那么table view会发送一系列消息给data source 和delegate对象.可以通过实现这些方法来修改table v

ios之UITableViewController(二) tableView的编辑模式

tableView的编辑模式 表视图可以进入编辑模式,当进入编辑模式就可以进行删除.插入.移动单元等操作 效果图: 让表视图进入编辑模式,进入编辑模式的方法有两种,一种是使用导航栏的edit 按钮,另一种是设置tableView的editing属性进入编辑模式. 最后通过实现UITableViewDataSource协议的方法实现单元格的删除.插入和移动 1,在viewDidLoad方法里面指定导航栏的右按钮为edit按钮 self.navigationItem.rightBarButtonIt

iOS_13_tableView的编辑模式_红楼梦

最终效果图: Girl.h // // Girl.h // 12_tableView的增删改 // // Created by beyond on 14-7-27. // Copyright (c) 2014年 com.beyond. All rights reserved. // #import <Foundation/Foundation.h> @interface Girl : NSObject // UI控件用weak,字符串用copy,其他对象用strong // 头像图片名 @pr