`
toyota2006
  • 浏览: 551358 次
  • 性别: Icon_minigender_1
  • 来自: 石家庄
社区版块
存档分类
最新评论

iPhone/iPad 开发: 可编辑的TableView

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

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

首先要将存储数据的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时出现的
  • 大小: 28.7 KB
分享到:
评论

相关推荐

    (0110)-iOS/iPhone/iPAD/iPod源代码-列表(Table)-Movable TableView

    本教程主要探讨的是如何在iOS应用中实现一个可移动单元格的TableView,让用户能够自由调整列表中元素的顺序,无需进入编辑模式。这个特性适用于那些需要用户自定义排序的场景,比如任务管理器、音乐播放列表等。 ...

    iphone ipad TableViewExample.zip

    本示例"TableViewExample.zip"应该是包含了创建和使用UITableView的一个实例项目,适合于iPhone和iPad设备。下面我们将深入探讨UITableView的相关知识点。 1. UITableView基本结构: UITableView由多个单元格...

    Professional iPhone and iPad Application Development

    ### 专业iPhone与iPad应用程序开发知识点汇总 #### 一、导言 本书《专业iPhone与iPad应用程序开发》是一本深入探讨iOS平台应用开发的专业书籍,旨在帮助开发者掌握iOS应用程序开发的核心技术和最佳实践。作者Gene ...

    Movable TableView(iPhone源代码)

    来源:Licence:BSD平台:iOS设备:iPhone / iPad作者:Florian Mielke  实现单元格可移动的列表。用户可以移动列表中任意单元格,从而改变单元格的顺序。用户移动过程中不需要让列表处于可编辑模式(edit mode...

    ios-阿里巴巴订货.zip

    2. **弹出视图**:标签提到的“弹出视图”可能指的是UIPopoverController(iPad)或UIAlertController(iPhone/iPad通用)。在购物车功能中,弹出视图可能用于展示商品详情、编辑购物车内容或确认订单。实现时需要...

    《Beginning iPhone development》书籍源码

    《Beginning iPhone Development》是一本专为初学者设计的iOS应用开发指南,涵盖了使用Apple的Swift编程语言和Xcode集成开发环境(IDE)进行iPhone和iPad应用程序开发的基础知识。这本书源码的提供,使得读者能够更...

    从零开始学iOS7开发

    iOS7的开发是iPhone和iPad应用开发者的必经之路。这个操作系统引入了多项新技术和界面改进,对于准备开始学习iOS开发的人来说,掌握iOS7的开发技能是迈向成功的基石。 #### 事务管理应用开发 事务管理应用(To-do ...

    静态cellDemo

    这有助于确保你的应用在iPhone和iPad上都有良好的表现。 8. **代码中的实现**:在ViewController的`viewDidLoad`方法中,通常无需像动态Cell那样注册Cell类或重写`numberOfSectionsInTableView`和`tableView:...

Global site tag (gtag.js) - Google Analytics