zoukankan      html  css  js  c++  java
  • 可编辑的TableView

    编写简单的导航控制器基础上,让TableView的条目是可编辑的。这里示例将实现对条目的排序,删除等类似。实现的效果:

    image image image

    编写简单的导航控制器基础上做如下修改。

    首先要将存储数据的NSArray改为NSMutableArray,因为前者是不可变的。在头文件中:

    @interface RootViewController : UITableViewController <UITableViewDelegate,UITableViewDataSource>{
        NSMutableArray *dataItems;

    在m文件中:

    dataItems= [[NSMutableArray alloc] initWithObjects:@"张三",@"李四",nil];

    然后,增加导航条右侧的按钮。先写出点击按钮的函数:

    -(IBAction)toggleMove{
        [self.tableView setEditing:!self.tableView.editing animated:YES];
    }

    下面,声明按钮并关联上述函数:

    - (void)viewDidLoad {
        dataItems= [[NSMutableArray alloc] initWithObjects:@"张三",@"李四",nil];
       self.navigationItem.rightBarButtonItem=[[UIBarButtonItem alloc] initWithTitle:@"移动"
                                                                                style:UIBarButtonItemStyleBordered
                                                                               target:self
                                                                               action:@selector(toggleMove)];
        [super viewDidLoad];
    }

    其实就是增加一句话。

    添加有关显示风格等的函数:

    -(UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath{
        return UITableViewCellEditingStyleNone;
    }

    -(BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath{
        return YES;
    }

    其中,后者(canMoveRowAtIndexPath)如果不写,将是删除而不是移动。

    在原有生成表条目的函数中增加一句话,用于显示右侧的控件:

    - (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] autorelease];
            cell.showsReorderControl=YES;
        }

    下面是最关键的函数,在移动表条目时回调的函数:

    -(void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *) fromIndexPath
         toIndexPath:(NSIndexPath *)toIndexPath{
        id object=[[dataItems objectAtIndex:[fromIndexPath row]] retain];
        [dataItems removeObjectAtIndex:[fromIndexPath row]];
        [dataItems insertObject:object atIndex:[toIndexPath row]];
        [object release];
    }

    这样就可以实现上述的效果了,不过会出现这样的警告日志:

    2010-10-13 22:42:47.220 NavTest[77449:207] WARNING: Using legacy cell layout due to delegate implementation of tableView:accessoryTypeForRowWithIndexPath: in <RootViewController: 0x5c04150>.  Please remove your implementation of this method and set the cell properties accessoryType and/or editingAccessoryType to move to the new cell layout behavior.  This method will no longer be called in a future release.

    因为accessoryTypeForRowWithIndexPath函数已经不建议使用了,要替换成:

    // Customize the appearance of table view cells.
    - (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] autorelease];
            cell.showsReorderControl=YES;
            cell.accessoryType=UITableViewCellAccessoryDetailDisclosureButton;
        }
        NSUInteger row=[indexPath row];
        cell.textLabel.text=[dataItems objectAtIndex:row];

        return cell;
    }

    同时删除tableView:accessoryTypeForRowWithIndexPath函数。这个问题不是编辑TableView时出现的,在前面写的编写简单的导航控制器中就开始有这个问题。

    http://marshal.easymorse.com/archives/3530
     

  • 相关阅读:
    旧文备份:CANopen协议PDO的几种传输方式
    CANopen 基础
    单片机FLASH与RAM、ROM的关系
    在CANopen网络中通过LSS服务设置节点地址和网络波特率
    STM32F103 CAN中断发送功能的再次讨论
    由RS-232串口到PROFIBUS-DP总线的转换接口设计
    profibus 的DPV0 和DPV1
    PROFIBUS-DP
    profibus总线和profibus dp的区别
    获取验证码倒计时
  • 原文地址:https://www.cnblogs.com/Snowfun/p/2046342.html
Copyright © 2011-2022 走看看