第九章 删除表格行,定制Action按钮,MVC模式(二)

来源:互联网 发布:红蜘蛛软件 编辑:程序博客网 时间:2024/05/29 14:43

从模型中删除行数据

下一件事情就是实现方法并用代码删除表中的真实数据。在方法声明中,indexPath参数为你提供要删除的单元的行号。所以你可以利用该信息然后从数据数组中移除合适的元素。

在 FoodPin app中,restaurantNames, restaurantLocations, restaurantTypes 和restaurantIsVisited都是数据模型。很明显,我们必须将选中的餐馆从所有的数组中移除。在Swift中,你可以使用removeAtIndex方法来从数组中移除元素。下面就是移除行数据的代码


该方法支持两种编辑类型:插入和删除。因为我们关心的是删除操作,我们只在用户点击删除按钮是移除数据。

试着再次测试一下你的app。哦,app并没有像预期那样工作。当你点击删除按钮,单元格没有被移除。可能你认为数据没有被正确移除。那我们在这里进行一些调试。在方法结束之前插入下面的代码将数组中的内容打印出来。


在Swift中你可以使用println方法在控制台输出一条消息。输出变量的内容是一种非常基础的调试方法。上面的代码在执行删除操作后打印出了整个restaurantNames数组中的元素。默认情况下控制台被Xcode隐藏了。选择view->Debug Area > Activate Console.

好现在编译和运行app。从表格中删除第一行(例如 Cafe Deadend)。你可以在调试区域下面的控制台中看到输出。一开始我们有21个餐馆元素,在执行删除行操作后,元素减少为20个。并且从输出看,“Cafe Deadend”已经被完全删除了。

所以app已经从数组中删除了元素。但是看起来是界面没有更新。对的,的确是界面没有更新。

我们还没有通知table view 更新它的内容。


重新加载UITableView

一种让界面更新它的内容的方法是调用reloadData。我们在前的方法中增加一行重载table view数据的代码。


当reloadData方法被调用时,table view 清除原内容并且重新从restaurant数组中获取数据再次显示。现在再次编译并且测试app。这次应该删除成功了。

从UITableView中删除行

现在app能够正常工作,但是有更好的更新table view的方法。思考一下,我们只要删除单独的行,为什么我们不从table view中删除指定的行。你可以使用deleteRowAtIndexPaths方法删除一个单独的行。使用下面的代码替代reloadData方法


再次编译并且运行。当你确定删除某条记录,该行就消失了。

更多的滑动操作

当你在股票邮件app中滑动一个表格单元时,你将会看到Trash(废弃)按钮,外加一个More(更多)按钮。More按钮将会显示一个操作列表例如回复,标记等等。当我第一次在IOS 7发布时使用这个功能时,我认为使用这种方式为管理表格的行提供更多的操作是非常好的。但是苹果公司最终没有在IOS7中为开发者提供这个功能。好消息是你能够在iOS8中使用该功能。


IOS8 SDK添加了一个名叫UITableViewRowAction的新类。你可以使用这个类来定制表格行的操作。为了给表格行提供定制的操作,你需要实现tableView(_:editActionsForRowAtIndexPath:)方法。在RestaurantTableViewController.swift中添加下面的代码:



UITableViewRowAction类的使用方法和UIAlertAction非常像。你指定用户点击按钮时的标题,样式和执行的代码。在本例中,我们将定制动作命名为 “Share”。当用户点击按钮,将会弹出一个菜单显示share可以使用服务。

你可能注意到我们在前面的代码中添加了删除按钮。当你实现tableView(_:editActionsForRowAtIndexPath:)方法,table view 将不再为你产生删除(Delete)按钮。所以我们需要创建我们自己的删除按钮。

上述代码中的最后一行可能是最重要的部分。它返回一个UITableViewRowAction数组对象通知table view 在滑动的时候创建按钮。编译并且运行app。滑动表格的行会显示你创建的两个按钮。点击Share按钮将会弹出类似下图的共享菜单。


UITableViewRowAction 类向开放者提供backgroundColor 属性以定制它的背景颜色


UIKit提供一个UIColor类来代表颜色。UIKit中的很多方法都需要你使用UIColor对象来提供颜色数据。UIColor类自带一些标准的颜色,例如UIColor.blueColor()和UIColor.redColor()。如果你想用你自己的颜色,你可以通过提供RGB元素的值来创建自己的UIColor对象。RGB元素对象的值需要在0和1之间。如果你是一个web设计师或者在图像方面有经验的话,你明白RGB值通常是在0到255之间的。为了适配UIColor类的要求,在创建UIColor对象时你需要将每个元素的值除以255。你可以在tableView(_:editActionsForRowAtIndexPath:)方法中添加下面的代码

return [deleteAction, shareAction]

好了。再次测试app,看看你是否对新颜色满意。不满意的话修改颜色代码直到你满意为止。

小结

在这章中为你对MVC进行了简明介绍并且展示了如何删除表格行。并且你还创建了一个滑动共享按钮。我们的FoodPin app在逐渐变好。你可以为你取得的进步自豪。

MVC的概念非常重要。如果你是一个编程新手,那需要一定的时间来理解。如果感到理解困难,那就休息一下并且喝一杯咖啡。休息之后回到本章。你可能就会发现更容易理解了。

在下一章,我们将学习一些新的东西并且创建一个导航控制器。

原创粉丝点击