• 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

  • 相关阅读:
    316 Remove Duplicate Letters 去除重复字母
    315 Count of Smaller Numbers After Self 计算右侧小于当前元素的个数
    313 Super Ugly Number 超级丑数
    312 Burst Balloons 戳气球
    309 Best Time to Buy and Sell Stock with Cooldown 买股票的最佳时间含冷冻期
    Java 类成员的初始化顺序
    JavaScript 全局
    HTML字符实体
    Java中的toString()方法
    JavaScript 弹窗
  • 原文地址:https://www.cnblogs.com/1079062429lm/p/4820605.html
Copyright © 2020-2023  润新知