zoukankan      html  css  js  c++  java
  • iOS.UIKit.17.UITableView -- Cells Operation

    1、案例介绍:表视图中单元格的增加、删除、移动,如图01,02

    图01图02

    2、.h

    #import <UIKit/UIKit.h>
    
    @interface CQ26ViewController : UIViewController<UITableViewDataSource,UITableViewDelegate,UITextFieldDelegate>
    
    @property (weak,nonatomic) IBOutlet UINavigationItem *navgationItem;
    @property (weak,nonatomic) IBOutlet UITableView *tableView;
    @property (strong,nonatomic) IBOutlet UITextField *txtField;
    
    @property (nonatomic,strong) NSMutableArray *listTeams;
    
    @end

    3、.m

    #import "CQ26ViewController.h"
    
    @interface CQ26ViewController ()
    
    @end
    
    @implementation CQ26ViewController
    
    - (void)viewDidLoad
    {
        [super viewDidLoad];
        
        // 1、设置导航栏
        self.navgationItem.rightBarButtonItem = self.editButtonItem;
        self.navgationItem.title = @"单元格插入和删除";
        
        // 2、设置单元格文本框
        self.txtField.hidden = YES;
        self.txtField.delegate = self;
        
        // 3、将当前视图控制器分配给表示图的委托和数据源
        self.tableView.delegate = self;
        self.tableView.dataSource = self;
        
        self.listTeams = [[NSMutableArray alloc] initWithObjects:@"黑龙江",@"吉林",@"辽宁", nil];
    }
    
    - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        return 50;
    }
    
    #pragma mark -- UIViewController生命周期方法,用于响应视图编辑状态变化
    - (void)setEditing:(BOOL)editing animated:(BOOL)animated {
        [super setEditing:editing animated:animated];
        
        [self.tableView setEditing:editing animated:YES];
        if (editing) {
            self.txtField.hidden = NO;
        } else {
            self.txtField.hidden = YES;
        }
    }
    #pragma mark UITableViewDataSource协议方法
    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
    {
        return [self.listTeams count] + 1;
    }
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        // 1、加载cell
        static NSString *CellIdentifier = @"Cell";
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
        if (cell == nil) {
            cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
        }
        // 2、设置cell的内容
        BOOL b_addCell = (indexPath.row == self.listTeams.count);
        if (!b_addCell) {
            cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
            cell.textLabel.text = [self.listTeams objectAtIndex:indexPath.row];
        }else{
            self.txtField.frame = CGRectMake(10, 0, 300, 44);
            self.txtField.text = @"";
            [cell.contentView addSubview:self.txtField];
        }
        
        return cell;
    }
    #pragma mark UITableViewDelegate协议方法
    - (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        if(indexPath.row == [self.listTeams count]){
            return UITableViewCellEditingStyleInsert;
        }else{
            return UITableViewCellEditingStyleDelete;
        }
    }
    #pragma mark UITableViewDataSource协议方法
    - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
    {
        if (editingStyle == UITableViewCellEditingStyleDelete) {
            [self.listTeams removeObjectAtIndex:indexPath.row];
            [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
        }else{
            [self.listTeams insertObject:self.txtField.text atIndex:[self.listTeams count]];
            [self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
        }
        [self.tableView reloadData];
    }
    
    #pragma mark -- UITextFieldDelegate委托方法,关闭键盘
    - (BOOL)textFieldShouldReturn:(UITextField *)textField
    {
        [textField resignFirstResponder];
        return  YES;
    }
    
    #pragma mark -- UITextFieldDelegate委托方法,避免键盘遮挡文本框
    - (void) textFieldDidBeginEditing:(UITextField *)textField {
        UITableViewCell *cell = (UITableViewCell*) [[textField superview] superview];
        [self.tableView setContentOffset:CGPointMake(0.0, cell.frame.origin.y) animated:YES];
    }
    - (void)didReceiveMemoryWarning
    {
        [super didReceiveMemoryWarning];
        // Dispose of any resources that can be recreated.
    }
    
    @end

    4、移动代码

    - (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath*)indexPath
    {
        return YES;
    }
    
    
    - (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath*)sourceIndexPath
          toIndexPath:(NSIndexPath *)destinationIndexPath
    {
        NSString *stringToMove = [self.listTeams objectAtIndex:sourceIndexPath.row];
        [self.listTeams removeObjectAtIndex:sourceIndexPath.row];
        [self.listTeams insertObject:stringToMove atIndex:destinationIndexPath.row];
    }
    
    
    #pragma mark --UITableViewDelegate 协议方法
    
    - (UITableViewCellEditingStyle)tableView:(UITableView *)tableView
               editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        return  UITableViewCellEditingStyleNone;
    }
    
    
    #pragma mark -- UIViewController生命周期方法,用于响应视图编辑状态变化
    - (void)setEditing:(BOOL)editing animated:(BOOL)animated {
        
        [super setEditing:editing animated:animated];
        
        [self.tableView setEditing:editing animated:YES];
        
    }
  • 相关阅读:
    国内外常用学术论文搜索网站
    2019年全国高校sql数据库
    Flask无法访问(127.0.0.1:5000)的问题解决方法
    Windows终端命令行工具Cmder
    JQuery实现密码可见不可见
    区块链最大的难题及其解决方案
    python 下载 进度条
    centos 用docker 运行 cypress
    通过 centos Nginx 查看html (为后续 服务器生成html 方便访问)
    odoo 分享 PostgreSQL 语句2
  • 原文地址:https://www.cnblogs.com/cqchen/p/3766641.html
Copyright © 2011-2022 走看看