IOS开发(28)UITableView之移动Section和Cell

1 前言

今天我们来学习一下如何移动UITableView控件中的Section和Cell

2 代码实例

ZYViewController.h

#import <UIKit/UIKit.h>

@interface ZYViewController : UIViewController<UITableViewDelegate,UITableViewDataSource>

@property(nonatomic,strong)UITableView *myTableView;
@property(nonatomic,strong)NSMutableArray *arrayOfSections;//数据源


@end

ZYViewController.m

@synthesize myTableView;
@synthesize arrayOfSections;

//初始化数据源每个Cell的内容
-(NSMutableArray *)newSectionWithIndex:(NSUInteger)paramIndex withCellCount:(NSUInteger)paramCellCount{
    NSMutableArray *result = [[NSMutableArray alloc]init];
    NSUInteger counter = 0;
    for (counter = 0; counter<paramCellCount; counter++) {
        [result addObject:[[NSString alloc] initWithFormat:@"Section %lu Cell %lu",(unsigned long)paramIndex,(unsigned long)counter+1]];
    }
    return result;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
	// Do any additional setup after loading the view, typically from a nib.
    //初始化数据源
    arrayOfSections = [[NSMutableArray alloc] init];
    NSMutableArray *section1 = [self newSectionWithIndex:1 withCellCount:3];
    NSMutableArray *section2 = [self newSectionWithIndex:2 withCellCount:3];
    NSMutableArray *section3 = [self newSectionWithIndex:3 withCellCount:3];
    [arrayOfSections addObject:section1];
    [arrayOfSections addObject:section2];
    [arrayOfSections addObject:section3];
    myTableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStyleGrouped];
    self.myTableView.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight;
    //添加代理
    myTableView.delegate = self;
    myTableView.dataSource = self;
    //添加右按钮
    self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"MoveSection" style:UIBarButtonItemStylePlain target:self action:@selector(movewSection1ToSection3)];
    //添加左按钮
    self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"MoveCell" style:UIBarButtonItemStylePlain target:self action:@selector(moveCell2InSectionToCellInSection2)];
    [self.view addSubview:myTableView];
    
}
//Section行数
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
    NSInteger result = 0;
    if ([tableView isEqual:myTableView]) {
        result = (NSInteger)[self.arrayOfSections count];
    }
    return result;
}
//每个Section中的Cell行数
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    NSInteger result = 0;
    if ([tableView isEqual:myTableView]) {
        if ([arrayOfSections count]>section) {
            NSMutableArray *sectionArray = [self.arrayOfSections objectAtIndex:section];
            result = (NSInteger)[sectionArray count];
        }
    }
    return result;
}
//设置每行Cell的内容

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    UITableViewCell *result = nil;
    if ([tableView isEqual:myTableView]) {
        static NSString *CellIdentifier = @"CellIdentifier";
        result = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }
    NSMutableArray *sectionArray = [self.arrayOfSections objectAtIndex:indexPath.section];
    result.textLabel.text = [sectionArray objectAtIndex:indexPath.row];
    return result;
}
//将第一个索引位置的Section移动放到最后一个位置
-(void)movewSection1ToSection3{
    NSMutableArray *section1 = [self.arrayOfSections objectAtIndex:0];
    [self.arrayOfSections removeObject:section1];
    [self.arrayOfSections addObject:section1];
    
    [myTableView moveSection:0 toSection:2];
}
//将第一个Section中的第一个Cell和第二个互换
-(void)moveCell1InSectionToCell2InSection1{
    NSMutableArray *section1 = [self.arrayOfSections objectAtIndex:0];
    NSString *cell1InSection1 = [section1 objectAtIndex:0];
    [section1 removeObject:cell1InSection1];
    [section1 insertObject:cell1InSection1 atIndex:1];
    NSIndexPath *sourceIndexPath = [NSIndexPath indexPathForRow:0 inSection:0];
    NSIndexPath *destinationIdexPath = [NSIndexPath indexPathForRow:1 inSection:0];
    [self.myTableView moveRowAtIndexPath:sourceIndexPath toIndexPath:destinationIdexPath];
}
//将第一个Section的第二个Cell移动到第二个Section的第一个Cell之前的位置
-(void)moveCell2InSectionToCellInSection2{
    NSMutableArray *section1 = [arrayOfSections objectAtIndex:0];
    NSMutableArray *section2 = [arrayOfSections objectAtIndex:1];
    
    NSString *cell2InSection1 = [section1 objectAtIndex:1];
    [section1 removeObject:cell2InSection1];
    [section2 insertObject:cell2InSection1 atIndex:0];
    
    NSIndexPath *sourceIndexPath = [NSIndexPath indexPathForRow:1 inSection:0];
    NSIndexPath *destinationIndexPath = [NSIndexPath indexPathForRow:0 inSection:1];
    
    [myTableView moveRowAtIndexPath:sourceIndexPath toIndexPath:destinationIndexPath];
}

运行结果:


点击右侧按钮后效果:


点击左侧按钮后效果:


3 结语

以上就是全部内容,希望对大家有所帮助。

Demo下载地址:http://download.csdn.net/detail/u010013695/5322406

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值