学了这么久的swift语法和相关技术,今天忍不住手痒痒就写了一个swift的小项目,这个项目非常简单(只是使用一个UITableView),但是里面的功能却非常有用。

我们要实现的功能是这样的:

程序启动之后就会出现主界面,在主界面有一些默认的度假地

点击编辑就会出现能过编辑的界面(这里编辑只实现了删除,修改没有处理,增加在+实现了),也可以手指向左拖动实现,

点击+可新增一个项目行

是不是很简单?

下面就看看代码时证明实现的

一;定义一个类用来处理对应的属性

 import Foundation

 class Vocation {
     var place = ""
     var visited = false
 }

二:在主界面嘞中实现下面代码

 import UIKit

 class ListTableViewController: UITableViewController {
     //度假地数组
     var vocationList = [Vocation]()

     //添加度假地
     func loadInitListData() {
         /**
          类的初始化,初始化五个度假地,设置度假地的地名,并且添加到列表中
         */
         let vocation1 = Vocation()
         vocation1.place = "北京"
         vocationList.append(vocation1)

         let vocation2 = Vocation()
         vocation2.place = "上海"
         vocationList.append(vocation2)

         let vocation3 = Vocation()
         vocation3.place = "深圳"
         vocationList.append(vocation3)

         let vocation4 = Vocation()
         vocation4.place = "广州"
         vocationList.append(vocation4)

         let vocation5 = Vocation()
         vocation5.place = "南京"
         vocationList.append(vocation5)

     }

     override func viewDidLoad() {
         super.viewDidLoad()
         //导航栏左边的按钮
         self.navigationItem.leftBarButtonItem = self.editButtonItem()

         //初始化
         loadInitListData()
     }

     override func setEditing(editing: Bool, animated: Bool) {
         super.setEditing(editing, animated: true)
         //设置表格可以编辑
         tableView.setEditing(editing, animated: true)

     }

     override func didReceiveMemoryWarning() {
         super.didReceiveMemoryWarning()
     }

     override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
         //返回一节数据

     }

     override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
         //返回数组中数据的数量
           return   vocationList.count
     }

     override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
         //重用机制,我们需要在单元格中设置对应的Identifier
         let cell = tableView.dequeueReusableCellWithIdentifier("ListID", forIndexPath: indexPath) as! UITableViewCell
         //保存状态
     let v = vocationList[indexPath.row]
         //根据数组的索引出来的地点来填充数据到对应的行
         cell.textLabel?.text = v.place
         //判断单元格的状态
         if v.visited {
             //如果已经参观过则点击一下现实一个勾
             cell.accessoryType = UITableViewCellAccessoryType.Checkmark
         }else {
             //如果没有去过可以取消点击,去掉那个勾
             cell.accessoryType = UITableViewCellAccessoryType.None

             /**UITableViewCellAccessoryType对应的属性,这里是一个枚举(enmu:case)
             case None // don't show any accessory view
             case DisclosureIndicator // regular chevron. doesn't track
             case DetailDisclosureButton // info button w/ chevron. tracks
             case Checkmark // checkmark. doesn't track
             @availability(iOS, introduced=7.0)
             case DetailButton // info button. tracks
             */
         }

         return cell
     }

     //选择行
     override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
         //取出选择的对应行数据
         let v1 = vocationList[indexPath.row]
         //设置已经去过的地方,这里使用取反实现
         v1.visited = !v1.visited
         //取消选中状态
         tableView.deselectRowAtIndexPath(indexPath, animated: false)
         //刷新表格
         tableView.reloadData()

     }

     // 是否能够编辑
     override func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool {
         return true
     }

     override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
         //如果是删除状态
         if editingStyle == .Delete {    //省略了UITableViewCellEditingStyle
             //根据索引行删除数据
             vocationList.removeAtIndex(indexPath.row)
             //根据索引行删除单元格
             tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)

             /**UITableViewRowAnimation对应的属性,这里是一个枚举
             case Fade
             case Right // slide in from right (or out to right)
             case Left
             case Top
             case Bottom
             case None // available in iOS 3.0
             case Middle // available in iOS 3.2.  attempts to keep cell centered in the space it will/did occupy
             case Automatic // available in iOS 5.0.  chooses an appropriate animation style for you
             */

             //如果是插入状态
         } else if editingStyle == .Insert {

         }
     }

     // Override to support rearranging the table view.
     override func tableView(tableView: UITableView, moveRowAtIndexPath fromIndexPath: NSIndexPath, toIndexPath: NSIndexPath) {

     }

     //是否能够移动
     override func tableView(tableView: UITableView, canMoveRowAtIndexPath indexPath: NSIndexPath) -> Bool {
         return true
     }

     //prepareForSegue方法
     override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

     }

     //回到主界面的方法
     @IBAction func unwindToList(segue: UIStoryboardSegue){
         //定义一个源控制器为我们自定义的控制器
         let source = segue.sourceViewController as! AddViewController
         let va = source.vocation
         //判断度假地是否为空
         if va.place != "" {
             vocationList.append(va)
         }

     }

 }

实现点击新增(+)界面的代码

 class AddViewController: UIViewController {
     //初始化类
     var vocation = Vocation()

     @IBOutlet weak var text: UITextField!
     //@IBOutlet weak var textField:UItextField!

     @IBOutlet weak var done: UIBarButtonItem!
     //@IBOutlet weak var doneBtn:UIBarButtonItem!

     override func viewDidLoad() {
         super.viewDidLoad()

     }

     override func didReceiveMemoryWarning() {
         super.didReceiveMemoryWarning()
     }

     override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

         if  sender as! NSObject == done {
             if (!text.text.isEmpty) {
                 vocation.place = text.text
             }
         }
     }
 

ios开发——实战Swift篇&简单项目的实现的更多相关文章

  1. iOS开发——实战OC篇&环境搭建之Xib(玩转UINavigationController与UITabBarController)

    iOS开发——实战OC篇&环境搭建之Xib(玩转UINavigationController与UITabBarController)   前面我们介绍了StoryBoard这个新技术,和纯技术 ...

  2. iOS开发——实战OC篇&环境搭建之纯代码(玩转UINavigationController与UITabBarController)

    iOS开发——实战OC篇&环境搭建之纯代码(玩转UINavigationController与UITabBarController)   这里我们就直接上实例: 一:新建一个项目singleV ...

  3. iOS开发——实战OC篇&环境搭建之StoryBoard(玩转UINavigationController与UITabBarController)

      环境搭建之StoryBoard(玩转UINavigationController与UITabBarController)   研究了这么就IOS开发,都没有所处一个像样或者自己忙一点的项目.最近自 ...

  4. iOS 开发——实用技术Swift篇&Swift 懒加载(lazy)

    Swift 懒加载(lazy) 在程序设计中,我们经常会使用 * 懒加载 * ,顾名思义,就是用到的时候再开辟空间,比如iOS开发中的最常用控件UITableView,实现数据源方法的时候,通常我们都 ...

  5. iOS开发——网络Swift篇&NSURL进行数据请求(POST与GET)

    NSURL进行数据请求(POST与GET)   使用Swift进行iOS开发时,不可避免的要进行远程的数据获取和提交. 其数据请求的方式既可能是POST也可能是GET.同不管是POST还是GET又可以 ...

  6. IOS开发实战-Xcode创建HelloWorld项目

    一.创建工程打开Xcode开发工具,在Welcome界面选择”Create a new Xcode project”选项 在选择模板窗口,选择”Single View Application” 确定模 ...

  7. iOS开发——实用技术OC篇&简单抽屉效果的实现

    简单抽屉效果的实现 就目前大部分App来说基本上都有关于抽屉效果的实现,比如QQ/微信等.所以,今天我们就来简单的实现一下.当然如果你想你的效果更好或者是封装成一个到哪里都能用的工具类,那就还需要下一 ...

  8. iOS开发——网络Swift篇&JSON与XML数据解析

    JSON与XML数据解析 JSON数据解析(内置NSJSONSerialization与第三方JSONKit)   一,使用自带的NSJSONSerialization 苹果从IOS5.0后推出了SD ...

  9. ios开发——实战OC篇&FMDB详解

    FMDB详解 前一篇文章中我们介绍的SQLite的使用,在iOS中原生的SQLite API在使用上相当不友好. 于是,就出现了一系列将SQLite API进行封装的库,例如FMDB.Plausibl ...

随机推荐

  1. Oracle OCI-22053:溢出错误解决方法

    原文 Oracle OCI-22053:溢出错误解决方法 Oracle 数值数据类型最多可存储 38 个字节的精度.当将 Oracle 数值转换为公共语言运行库数据类型时,小数点后边的位数可能过多,这 ...

  2. java 中常见异常

    1. Java.lang.NullPointerException  这个异常大家肯定都经常遇到,异常的解释是"程序遇上了空指针",简单地说就是调用了未经初始化的对象或者是不存在的 ...

  3. 《Python基础教程(第二版)》学习笔记 -> 第十章 充电时刻 之 标准库

    SYS sys这个模块让你能够访问与Python解释器联系紧密的变量和函数,下面是一些sys模块中重要的函数和变量: 函数和变量 描述 argv 命令行参数,包括脚本和名称 exit([arg])   ...

  4. NGUI学习笔记-UISprite

    所有的Sprite使用前,得先准备个图集,然后选择里面的图片进行填充 UISprite里面有几个属性做个笔记: Type: Smple:除了显示内容从图集里面获取外,其他都和Texture一样的绘制 ...

  5. 【原】Storm学习资料推荐

    4.Storm学习资料推荐 书籍: 英文: Learning Storm: Ankit Jain, Anand Nalya: 9781783981328: Amazon.com: Books Gett ...

  6. ASP.NET MVC之Html.RenderAction

    WEB窗体模式开发惯了,切入MVC模式,好多东西都不懂,每一步都要查资料. 初步得来的一些知识点体会是: _Layout.cshtml就相当于母版页 然后partical视图(部分视图)就是用户控件. ...

  7. bzoj 1097 [POI2007]旅游景点atr(最短路,状压DP)

    [题意] 给定一个n点m边的无向图,要求1开始n结束而且顺序经过k个点,给出经过关系x,y代表y必须在x之后经过,求最短路. [思路] 先对k个点进行spfa求出最短路. 设f[s][i]代表经过点集 ...

  8. Java IO流中的File类学习总结

    一.File类概述 File类位于java.io包中,是对文件系统中文件以及文件夹进行封装的对象,可以通过对象的思想来操作文件和文件夹. File类有多种重载的构造方法.File类保存文件或目录的各种 ...

  9. sqlserver 中的GUID 全局唯一标识 -摘自网络

    --简单实用全局唯一标识 DECLARE @myid uniqueidentifierSET @myid = NEWID()PRINT 'Value of @myid is: '+ CONVERT(v ...

  10. git使用中遇到的常见问题

    .gitignore 中添加的文件不能被忽略掉 这是因为我们误解了 .gitignore 文件的用途,该文件只能作用于 Untracked Files,也就是那些从来没有被 Git 记录过的文件(自添 ...