正如在以前的帖子说,但是我在转到故事版(StoryBoard)教程之前,我有另外一个问题来回答。

我如何从UITableView删除一行呢?

当人们构建简单的表视图引用程序后,这是另一个常见的​​问题。同样的,它比你想象的更容易。但在进入编码部分,我打算给你介绍一个程序员使用最多的设计模式,用户界面​​编程的模型 - 视图 - 控制器模式(Model-View-Controller)。

如果你是认真对待iOS编程的话,你无法逃避学习模型 - 视图 - 控制器(MVC)。除了iOS编程,MVC也常用在其他编程语言如Java,C#。如果你有其他编程背景,MVC对你来说就不是新的了。

理解模型-视图-控制器(MVC)

对于MVC的核心想法,到后来的框架中最有影响力的,就是我所说的关注点分离。关注点分离背后的想法是做出了清晰分离的域对象模型,他们是我们对现实世界的看法,并抽象为对象,最后在屏幕上转换为我们看到的图形用户界面元素。域对象应该是完全独立的,与外部界面完全分离,他们也应该能够支持多个界面,可能同时。这种方法是Unix文化的重要组成部分,并一直延续至今许多通过一个图形界面和命令行界面进行操作的程序。

Martin Fowler

不管你学什么计算机语言,一个重要的概念,让你成为一个更好的程序员的是关注点分离(SoC)。这个概念是相当简单的,关注软件功能的不同方面。这种概念,鼓励开发人员将一个大的功能或程序分为对多个区域的关注,每个地区都有自己的责任。我们在前面的教程中解释的委托模式通常被作为在iOS编程的一个SOC的例子。

在这里,模型 - 视图 - 控制器的SoC是另一个例子。MVC的核心思想是明确分开的用户界面分为三个区域(或对象组),每个区域负责的特定功能。正如它的名字所暗示的,MVC将用户界面分为三个部分:

模型 -模型是负责用于控制数据或任何对象对数据的操作。该模型可以作为一个数组对象,它存储所有的表格数据并实现添加,编辑和删除的操作实例。在现实中,这些操作通常被称为业务规则。

视图 -视图管理信息的可视化显示。例如,UITableView中显示的信息在表视图格式。

控制器 -控制器是模型和视图之间的桥梁。它转换成适当的行为,在模型中进行用户交互的视图(如TAP)。例如,用户点击删除按钮在视图和控制器,进而触发了在模型中的删除操作。之后,申请视图刷新自己的数据模型来反映更新。

为了更好地帮助你理解MVC,让我们使用简单的表应用程序作为一个例子。该应用程序会显示一个列表的表视图。如果你把概念转化为可视化表示,这里表示数据如何的表中显示:

以MVC模式为例说明了如何使用简单的表

菜单的信息都存储在单独的数组对象模型中。每个表行映射元素的菜单阵列。UITableView的对象是被用户所看到的界面视图。它负责所有的视觉效果(例如颜色表中的行,字体大小和类型)。TableViewController作为的TableView和菜单数据模型之间的桥梁。显示数据的时候,UITableView实际上请求Controller提供数据,Controller就从Model中得到数据.

如何从UITableView删除行

我希望你对模型 - 视图 - 控制器有一个更好的了解。现在,让我们继续前进到编码部分,看看我们如何能够从UITableView中删除行。为了让事情变得简单,我将使用简单的表的应用程序作为一个例子。

如果你完全理解MVC模式,你可能对如何实现删除行有一些想法。有三个主要的事情是我们需要做的:

1。编写代码以切换到编辑模式的行删除 
2。从模型中删除行 
3 返回相应的表中的数据。刷新表视图,以反映表数据的变化

1.编写代码切换到编辑模式的行删除

在iOS应用程序中,用户通常使用一个“删除”按钮来处理行删除。回想我们以前的程序,我们采用了UITableViewDataSource协议,如果你看过API文档,还有一种方法名为:commitEditingStyle:forRowAtIndexPath。当用户在一行上向左或向右滑动时,表视图检查看是否已经实现该方法。如果实现该方法,表视图会自动显示“删除”按钮。

只需添加以下代码到您的表视图的应用程序,并运行您的应用程序:




- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath 
{

}

即使方法是空的,不执行任何操作,你在行上左右滑动时的时候,你会看到“删除”按钮。

左右滑动删除表中的行

2.从模型中删除相应表中数据

接下来的事情就是将代码添加到方法中来删除实际表中的数据。像其他表视图方法一样,它把indexPath作为参数,来告诉你删除的行号。所以,你可以利用这些信息,来删除相应的数组元素。

简单表格应用程序的源代码中,我们使用NSArray的存储表数据(模型)。NSArray的问题是它的不可编辑的。也就是说,数组一旦被初始化你不能添加/删除其内容。因此,我们将改变NSArray为NSMutableArray,它增加了插入和删除操作:










10
11
@implementation SimpleTableViewController 

    NSMutableArray *tableData; 
}

- (void)viewDidLoad 

    [super viewDidLoad]; 
    // Initialize table data 
    tableData = [NSMutableArray arrayWithObjects:@"Egg Benedict", @"Mushroom Risotto", @"Full Breakfast", @"Hamburger", @"Ham and Egg Sandwich", @"Creme Brelee", @"White Chocolate Donut", @"Starbucks Coffee", @"Vegetable Curry", @"Instant Noodle with Egg", @"Noodle with BBQ Pork", @"Japanese Noodle with Pork", @"Green Tea", @"Thai Shrimp Cake", @"Angry Birds Cake", @"Ham and Cheese Panini", nil]; 
}

在tableView:commitEditingStyle方法,添加下面的代码来实现从数组中删除实际数据。你的方法应该是这样的:





- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath 

    // Remove the row from data model 
    [tableData removeObjectAtIndex:indexPath.row]; 
}

NSMutableArray提供了大量的方法来操作的数组内容。在这里,我们利用“removeObjectAtIndex”的方法从数组中删除一个特定的项目。您可以尝试运行的应用程序和删除行。哎呀!应用程序不按预期工作。

这不是一个错误。该应用程序从数组中删除该项目。但为什么删除的项目仍然出现呢?原因在于没有刷新界面,以反映更新的数据模型。

3.刷新表视图

因此,一旦相关的数据将被删除,我们需要调用reloadData方法要求表视图刷新。下面是更新后的代码:








- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath 

    // Remove the row from data model 
    [tableData removeObjectAtIndex:indexPath.row]; 
     
    // Request table view to reload 
    [tableView reloadData]; 
}

测试你的应用程序实现删除操作

尝试再次运行您的应用程序和刷卡删除行。您应该能够将其删除。

简单表格应用程序中删除表中的行

与往常一样,离开我的教程,评论,分享您的经验。

tableview 删除cell的更多相关文章

  1. 使用sqlite3 有关tableview删除cell的问题

    在root页面,想要删除tableviewcell,是有一定顺序的 首先要删除 数据库sqlite3 中的数据,然后删除数组中的数据,最后删除cell 一般我们知道,删除cell要在删除数组数据之后, ...

  2. iOS tableview自定义cell上添加按钮实现删除功能

    在删除的时候,先删除数据源,再删除cell 但是,会发现一直崩: numberOfRowsInSection 解决方案:

  3. tableView中cell的复用机制

    TableView的重用机制,为了做到显示和数据分离,IOS tableView的实现并且不是为每个数据项创建一个tableCell.而是只创建屏幕可显示最大个数的cell,然后重复使用这些cell, ...

  4. 动态展开tableView的cell[2]

    动态展开tableView的cell[2] http://code4app.com/ios/%E5%8A%A8%E6%80%81%E6%B7%BB%E5%8A%A0cell/53845f8a933bf ...

  5. UITableVIew与UICollectionView带动画删除cell时崩溃的处理

    UITableVIew与UICollectionView带动画删除cell时崩溃的处理 -会崩溃的原因是因为没有处理好数据源与cell之间的协调关系- 效果: tableView的源码: ModelC ...

  6. IOS 关于tableview中cell的长按手势

    说明:虽然是tableview中cell的长按手势  但是手势是添加在tableview上的 UILongPressGestureRecognizer *longpress = [[UILongPre ...

  7. 关于tableview内cell自定义的注册以及创建

    自定义cell的方法主要有两种,storyboard以及xib(假设新建的是cellTableViewCell类) 比较倾向于xib方式使用xib在xib文件内将自定义的cell绘制好后导入到调用文件 ...

  8. TableView的cell加载倒计时重用问题解决方案

    TableView的cell加载倒计时重用问题解决方案 效果 说明 1. 写过类似需求的朋友一定知道,TableView上面加载倒计时功能会遇到复杂的重用问题难以解决 2. 本人提供一种解决思路,高效 ...

  9. 解决tableView中cell动态加载控件的重用问题

    解决tableView中cell动态加载控件的重用问题 tableView的cell,有时候需要在运行时取得对应的数据后才能够动态的创建该cell中的控件并加载到该cell中,此时,你一定会遇到重用问 ...

随机推荐

  1. 51nod1402(贪心)

    题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1402 题意:中文题诶- 思路:贪心 对于一个桩点,如果我们只考 ...

  2. [Xcode 实际操作]九、实用进阶-(7)使用Xcode的版本管理功能(SCM)

    目录:[Swift]Xcode实际操作 本文将演示系统的版本控制功能. 软件配置管理(SCM):Software configuration management 是指通过执行版本控制.变更控制的规程 ...

  3. 多线程Demo1 了解

      首先演示一下主线程的阻塞   //  DYFViewController.m //  623-01-阻塞多线程 // //  Created by dyf on 14-6-23. //  Copy ...

  4. PJzhang:robots协议的实际场景

    猫宁!!! 参考链接: https://bbs.360.cn/thread-15062960-1-1.html https://ziyuan.baidu.com/college/courseinfo? ...

  5. js_jquery

    引用 jQuery 是一个 JavaScript 库,不需要安装,直接引用就行 <!-- jQuery --> <script src="/static/vendors/j ...

  6. C#基础之析构函数

  7. 2017"百度之星"程序设计大赛 - 资格赛 度度熊的王国战略

    度度熊的王国战略 度度熊国王率领着喵哈哈族的勇士,准备进攻哗啦啦族. 哗啦啦族是一个强悍的民族,里面有充满智慧的谋士,拥有无穷力量的战士. 所以这一场战争,将会十分艰难. 为了更好的进攻哗啦啦族,度度 ...

  8. IIS发布MVC应用程序问题

    1.IIS7.5详细错误 HTTP 错误 500.19 - Internal Server Error 无法访问请求的页面,因为该页的相关配置数据无效 重复定义了“system.web.extensi ...

  9. nginx 配置步骤

    D:\myphp2017\nginx\conf.nginx.conf37行 吧localhost 改为www.ff.com41行取消注释44行 加D:\myphp2017\nginx\html45 在 ...

  10. arcgis mdb 数据中的shp 如何合并一起

    如上操作  一直往下就可以啦 选择数据源 就可以了,然后就可以load  其他数据啦   ,坐标系要一直