ios-表视图-demo7-cell的编辑

//
//  RootTableViewController.m
//  editcell
//
//  Created by  liyang on 14-4-29.
//  Copyright (c) 2014年 liyang. All rights reserved.
//

#import "RootTableViewController.h"

@interface RootTableViewController ()

@end

@implementation RootTableViewController

- (id)initWithStyle:(UITableViewStyle)style
{
    self = [super initWithStyle:style];
    if (self) {
        
        
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    
    _fontarrary=[NSMutableArray arrayWithArray:[UIFont familyNames]];
     self.navigationItem.rightBarButtonItem=self.editButtonItem;//这个是给这个导航控制器加上一个按钮,并且这个按钮还是主动调用了下面-(void)setEditing:(BOOL)editing animated:(BOOL)animated这个方法,这个方法和UITableView有个同名方法,但是是不一样的。调用这个功能就是这个editButtonItem来实现的
}
-(void)setEditing:(BOOL)editing animated:(BOOL)animated{//这个是继承了父类视图控制器的方法
    if (self.tableView.editing) {
        [self.tableView setEditing:NO animated:YES];
    }else {
        [self.tableView setEditing:YES animated:YES];
    }
}//使我们的表视图处于编辑或者非编辑状态

- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath{//这个表示哪些行可以进行编辑(增,删,移动)
    NSLog(@"canEditRowAtIndexPath");
    if (indexPath.row==0) {
        return NO;
    }
    return YES;
}
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath{//通过代理方法来进行判断编辑风格
    
    if (indexPath.row==1) {
          NSLog(@"UITableViewCellEditingStyleInsert");
        return UITableViewCellEditingStyleInsert;
    }
    NSLog(@"UITableViewCellEditingStyleDelete");

    return UITableViewCellEditingStyleDelete;
}//编辑的样式
int count=0;
// Override to support editing the table view.
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (editingStyle == UITableViewCellEditingStyleDelete) {
        [_fontarrary removeObjectAtIndex:indexPath.row];//删除的时候要先删除数据
        [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
    } else if (editingStyle == UITableViewCellEditingStyleInsert) {
        NSString *font_new=[NSString stringWithFormat:@"newfont%d",count];
        [_fontarrary insertObject:font_new atIndex:indexPath.row+1];
        NSIndexPath *_aaindexpath=[NSIndexPath indexPathForRow:indexPath.row+1 inSection:indexPath.section];
        [tableView insertRowsAtIndexPaths:@[_aaindexpath] withRowAnimation:UITableViewRowAnimationRight];
        count++;
    }
}

#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{

    return [_fontarrary count];
}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *cellidentifier=@"cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellidentifier];
    
    if (cell==nil) {
        cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellidentifier];
        UILabel *lable=[[UILabel alloc]initWithFrame:CGRectMake(0, 0, 320, 44)];
        lable.backgroundColor=[UIColor purpleColor];
        lable.tag=101;
        [cell.contentView addSubview:lable];
    }
    UILabel *lable=(UILabel *)[cell.contentView viewWithTag:101];
    lable.text=_fontarrary[indexPath.row];
    return cell;
}
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath
{
    
    NSString *text=[_fontarrary objectAtIndex:fromIndexPath.row];
    [_fontarrary removeObjectAtIndex:fromIndexPath.row];
    [_fontarrary insertObject:text atIndex:toIndexPath.row];
}//移动结束后,为的是修改数据



// Override to support conditional rearranging of the table view.
- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath
{     NSLog(@"canMoveRowAtIndexPath");
    // Return NO if you do not want the item to be re-orderable.
    return YES;
}

//总结:首先cell展示出来的时候就会判断这个cell是否可以编辑,然后编辑的时候就会先判断是否可编辑,然后调用判断此cell的编辑风格,然后判断此 cell是否可以移动,咋一看,为毛多此一举,在出现cell的时候就去判断是否可编辑,我想,我认为是出于数据结构中的,空间换取效率吧(纯属揣测),最后完成提交编辑的时候还会调用一次,是否可编辑。

@end

 

posted @ 2014-04-29 22:25  离子  阅读(214)  评论(0编辑  收藏  举报