你的位置:首页 > 操作系统

[操作系统]ios之UITableViewController(二) tableView的编辑模式


tableView的编辑模式

   表视图可以进入编辑模式,当进入编辑模式就可以进行删除、插入、移动单元等操作

  效果图:

  

   让表视图进入编辑模式,进入编辑模式的方法有两种,一种是使用导航栏的edit 

     按钮,另一种是设置tableView的editing属性进入编辑模式。

     最后通过实现UITableViewDataSource协议的方法实现单元格的删除、插入和移动

 

1,在viewDidLoad方法里面指定导航栏的右按钮为edit按钮

  self.navigationItem.rightBarButtonItem =self.editButtonItem;

 

 2,另一种进入编辑模式的方式是修改tableView的editing属性

  该属性是一个BOOL类型,默认值是NO,这里给导航栏添加一个左按钮,通过点击左按钮修改editing属性的值

   进入和退出编辑模式

 

- (void)editTableView:(UIBarButtonItem *)button

 {

  //修改editing属性的值,进入或退出编辑模式

      [self.tableView setEditing:!self.tableView.editinganimated:YES];

   if(self.tableView.editing){

   button.title = @"完成";

   }

  else{

   button.title = @"编辑";

     }

}

 

 

实现删除和插入行

  两方法一响应

方法一:那些行进入编辑模式

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

{

    return YES;

}

 

方法二:进入编辑模式的cell是删除还是增加

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

{

    return UITableViewCellEditingStyleDelete;

}

 

注意:这个方法里一般返回两种类型,还有一中默认类型

删除:UITableViewCellEditingStyleDelete

增加:UITableViewCellEditingStyleInsert

 

响应:点击当点击delete后执行的删除过程

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

{

  //删除数据源里的数据

  [self.array removeObjectAtIndex:indexPath.row];

  //再删除tableView中对应的行

     [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];

}

注意:先除数据源里的数据,删除tableView中对应的行

 

 

实现移动行

  当tableView进入编辑模式之后,默认每一行都是可以移动,每一行尾部有一个图标

  为三行灰色横线的按钮,就是表示该行可以移动

 一方法一响应

 

方法一:那些cell可以移动

-(BOOL)tableView:(UITableView *)tableView

canMoveRowAtIndexPath:(NSIndexPath *)indexPath

{

    return YES;

}

 

响应:移动的具体操作

- (void)tableView:(UITableView *)tableView

moveRowAtIndexPath:(NSIndexPath *)fromIndexPath

      toIndexPath:(NSIndexPath *)toIndexPath

{

    TRStudent *stu=self.array[fromIndexPath.row];

    [self.array removeObjectAtIndex:fromIndexPath.row];

    [self.array insertObject:stuatIndex:toIndexPath.row];

}

 

 

案例

AppDelegate.h

#import <UIKit/UIKit.h>

@interface AppDelegate : UIResponder <UIApplicationDelegate>

@property (strong, nonatomic) UIWindow *window;

@end

 

AppDelegate.m

#import "AppDelegate.h"

#import"TRStudent.h"

#import "TRTableViewController.h"

@implementation AppDelegate

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

{

    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    // Override point for customization after application launch.

    self.window.backgroundColor = [UIColor whiteColor];

    TRTableViewController *tr1=[[TRTableViewController alloc] initWithNibName:@"TRTableViewController" bundle:nil];

    UINavigationController *navi=[[UINavigationController alloc] initWithRootViewController:tr1];

    self.window.rootViewController=navi;

    [self.window makeKeyAndVisible];

    return YES;

}

@end

 

TRTableViewController.h

#import <UIKit/UIKit.h>

@interface TRTableViewController : UITableViewController

@property(nonatomic,strong) NSMutableArray *array;

@end

 

TRTableViewController.m

#import "TRTableViewController.h"

#import "TRStudent.h"

@interface TRTableViewController ()

@end

@implementation TRTableViewController

-(id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil

{

    return self=[super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];

}

 

- (void)viewDidLoad

{

    [super viewDidLoad];

    

    self.array=[TRStudent getarray];

    self.navigationItem.rightBarButtonItem=self.editButtonItem;

  }

 

 

//有多少分区

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

{

    return 1;

}

 

//有多少个cell单元

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

{

    return self.array.count;

}

 

//cell单元

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

{

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];

    if(cell==nil)

    {

        cell=[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:@"cell"];

    }

    TRStudent *stu=self.array[indexPath.row];

    cell.textLabel.text=stu.name;

    return cell;

}

 

 

//那些行进入编辑模式,根据你的需求自行设置,我这里设置的全部

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

{

    

    return YES;

}

 

//进入编辑模式的cell是删除还是增加

//自行设置,我这里设置的是最后一个cell单元是增加,其他是删除

-(UITableViewCellEditingStyle)tableView:(UITableView *)tableView

          editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath

{

    if(indexPath.row==self.array.count-1)

        return UITableViewCellEditingStyleInsert;

    return UITableViewCellEditingStyleDelete;

}

 

//点击当点击delete后执行的删除增加过程

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

{

    if (editingStyle == UITableViewCellEditingStyleDelete) {

        

            [self.array removeObjectAtIndex:indexPath.row];

        [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];

    } else if (editingStyle == UITableViewCellEditingStyleInsert) {

        

        TRStudent *str2=[[TRStudent alloc] init];

        str2.name=@"qwer";

        str2.name=@"124456";

        [self.array addObject:str2];

        NSIndexPath *insetindexpath=[NSIndexPath indexPathForRow:self.array.count-1 inSection:0];

        [tableView insertRowsAtIndexPaths:@[insetindexpath] withRowAnimation:UITableViewRowAnimationAutomatic];

        

    }

}

//那些cell可移动

-(BOOL)tableView:(UITableView *)tableView

canMoveRowAtIndexPath:(NSIndexPath *)indexPath

{

    return YES;

}

 

//移动

- (void)tableView:(UITableView *)tableView

moveRowAtIndexPath:(NSIndexPath *)fromIndexPath

      toIndexPath:(NSIndexPath *)toIndexPath

{

    TRStudent *stu=self.array[fromIndexPath.row];

    [self.array removeObjectAtIndex:fromIndexPath.row];

    [self.array insertObject:stuatIndex:toIndexPath.row];

     }

 

@end

 

 

 

TRStudent.h

#import <Foundation/Foundation.h>

 @interface TRStudent : NSObject

@property(nonatomic,strong) NSString *name;

@property(nonatomic,strong) NSString *phone;

+(NSMutableArray *)getarray;

@end

 

TRStudent.m

#import "TRStudent.h"

@implementation TRStudent

+(NSMutableArray *)getarray

{

    TRStudent *stu1=[[TRStudent alloc] init];

    stu1.name=@"q";

    stu1.phone=@"12345";

    TRStudent *stu2=[[TRStudent alloc] init];

    stu2.name=@"qqw";

    stu2.phone=@"12345";

    TRStudent *stu3=[[TRStudent alloc] init];

    stu3.name=@"sdsq";

    stu3.phone=@"12345";

    NSMutableArray *mut=[[NSMutableArray alloc] init];

    [mut addObject:stu1];

    [mut addObject:stu2];

    [mut addObject:stu3];

    return mut;

}

@end