ios开发——实战Swift篇&简单项目的实现
学了这么久的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篇&简单项目的实现的更多相关文章
- iOS开发——实战OC篇&环境搭建之Xib(玩转UINavigationController与UITabBarController)
iOS开发——实战OC篇&环境搭建之Xib(玩转UINavigationController与UITabBarController) 前面我们介绍了StoryBoard这个新技术,和纯技术 ...
- iOS开发——实战OC篇&环境搭建之纯代码(玩转UINavigationController与UITabBarController)
iOS开发——实战OC篇&环境搭建之纯代码(玩转UINavigationController与UITabBarController) 这里我们就直接上实例: 一:新建一个项目singleV ...
- iOS开发——实战OC篇&环境搭建之StoryBoard(玩转UINavigationController与UITabBarController)
环境搭建之StoryBoard(玩转UINavigationController与UITabBarController) 研究了这么就IOS开发,都没有所处一个像样或者自己忙一点的项目.最近自 ...
- iOS 开发——实用技术Swift篇&Swift 懒加载(lazy)
Swift 懒加载(lazy) 在程序设计中,我们经常会使用 * 懒加载 * ,顾名思义,就是用到的时候再开辟空间,比如iOS开发中的最常用控件UITableView,实现数据源方法的时候,通常我们都 ...
- iOS开发——网络Swift篇&NSURL进行数据请求(POST与GET)
NSURL进行数据请求(POST与GET) 使用Swift进行iOS开发时,不可避免的要进行远程的数据获取和提交. 其数据请求的方式既可能是POST也可能是GET.同不管是POST还是GET又可以 ...
- IOS开发实战-Xcode创建HelloWorld项目
一.创建工程打开Xcode开发工具,在Welcome界面选择”Create a new Xcode project”选项 在选择模板窗口,选择”Single View Application” 确定模 ...
- iOS开发——实用技术OC篇&简单抽屉效果的实现
简单抽屉效果的实现 就目前大部分App来说基本上都有关于抽屉效果的实现,比如QQ/微信等.所以,今天我们就来简单的实现一下.当然如果你想你的效果更好或者是封装成一个到哪里都能用的工具类,那就还需要下一 ...
- iOS开发——网络Swift篇&JSON与XML数据解析
JSON与XML数据解析 JSON数据解析(内置NSJSONSerialization与第三方JSONKit) 一,使用自带的NSJSONSerialization 苹果从IOS5.0后推出了SD ...
- ios开发——实战OC篇&FMDB详解
FMDB详解 前一篇文章中我们介绍的SQLite的使用,在iOS中原生的SQLite API在使用上相当不友好. 于是,就出现了一系列将SQLite API进行封装的库,例如FMDB.Plausibl ...
随机推荐
- 炮兵阵地(POJ 1185状压dp)
题意:n*m地图'H'能放'p'不能放,布兵的方格上下左右不能布兵,给你地图求最大布兵数 分析:关系到前两行,所以dp[i][j][k]第i行状态为j,i-1行状态为k时的最大布兵数, 先求出所有可行 ...
- codeforces 682C Alyona and the Tree DFS
这个题就是在dfs的过程中记录到根的前缀和,以及前缀和的最小值 #include <cstdio> #include <iostream> #include <ctime ...
- bjfu1235 两圆公共面积
给定两个圆,求其覆盖的面积,其实也就是求其公共面积(然后用两圆面积和减去此值即得最后结果). 我一开始是用计算几何的方法做的,结果始终不过.代码如下: /* * Author : ben */ #in ...
- 【开发流程】土耳其CDD工具
土耳其的CDD工具开发到现在已经三个星期了,进展非常不顺利,从最开始的遇到很多难题没法解决到现在工具可以运行但是有一个bug. 起初遇到的ExternalUtranCell这一页的信息很难填,没有解决 ...
- Java中Runnable和Thread的区别(转)
http://developer.51cto.com/art/201203/321042.htm 第一种方式:使用Runnable接口创建线程 第二种方式:直接继承Thread类创建对象 使用Runn ...
- Django settings — Django 1.6 documentation
Django settings - Django 1.6 documentation export DJANGO_SETTINGS_MODULE=mysite.settings django-admi ...
- 使用gson进行json转换
Gson 是 Google 提供的用来在 Java 对象和 JSON 数据之间进行映射的 Java 类库.可以将一个 JSON 字符串转成一个 Java 对象,或者反过来. 示例代码如下: 实体定义 ...
- How to organize the Template Files in C++
Normally you put class definitions in a header file and method definitions in a source file. Code th ...
- Unity3D之飞机游戏追踪导弹制作
最近开发完成一款打飞机的游戏,记录一下制作追踪导弹的方法,最开始在网上找到的资料制作出来的追踪导弹都不够真实,主要的问题是没有对导弹进行一个阀值处理,导弹每帧都始终会面向目标,而不是按照一定的角度进行 ...
- Measuring Signal Similarities
http://cn.mathworks.com/help/signal/examples/measuring-signal-similarities.html Open This Example ...