• 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

  • 相关阅读:
    $POST数组论证($GET || $COOKIE || $REQUEST 同理)
    PHP之preg_replace()与ereg_replace()正则匹配比较讲解
    PHP之mysql_real_escape_string()函数讲解
    浅析白盒审计中的字符编码及SQL注入
    PHP之list()函数讲解
    PHP之implode与explode函数讲解
    PHP之Error与Logging函数讲解
    Nextcloud私有云盘在Centos7下的部署笔记
    Linux下路由配置梳理
    实验c语言不同类型的指针互用(不推荐只是学习用)
  • 原文地址:https://www.cnblogs.com/1079062429lm/p/4820605.html
Copyright © 2020-2023  润新知