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];
        
    }
  • 相关阅读:
    游标cursor
    SQL: EXISTS
    LeetCode Reverse Integer
    LeetCode Same Tree
    LeetCode Maximum Depth of Binary Tree
    LeetCode 3Sum Closest
    LeetCode Linked List Cycle
    LeetCode Best Time to Buy and Sell Stock II
    LeetCode Balanced Binary Tree
    LeetCode Validate Binary Search Tree
  • 原文地址:https://www.cnblogs.com/cqchen/p/3766641.html
Copyright © 2011-2022 走看看