在本次学习TabView过程中,用到了以下基础知识,TabView的优化技术后续再学习。

1.UIAlertController

1)ActionSheet直接从底部弹出提示框

2)Alert直接从中间弹出提示框

3)通过UIAlertAction添加相应的属性(eg:Cancle/OK etc). UIAlertAction中的handler可以通过闭包来实现,闭包里面的action是UIAlertAction

2.UITableView

1)首先要实现UITableViewDataSource和UITableViewDelegate协议;

UITableViewDataSource中三个函数
func numberOfSectionsInTableView(tableView: UITableView) -> Int{ }
通过该函数指定TableView有多少块,默认为1
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int{ }
通过该函数指定每一块中有多少行
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath){ }

UITableViewDelegate中一个函数
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath){ }
当选中某一行然后执行的操作

其它相关函数如下(代码注释)
func tableView(tableView: UITableView, editActionsForRowAtIndexPath indexPath: NSIndexPath) -> [UITableViewRowAction]? { }
当编辑某一行时,添加相应的Action,如Delete/Share,返回的是一个UITableViewRowAction的数组。在其中某个action中实现handler的时候,若用闭包的时候,有两个参数,action是UITableViewRowAction类型的,还有一个是indexPath: NSIndexPath。

3.代码如下:

ViewController.swift

import UIKit

class ViewController: UIViewController,UITableViewDelegate,UITableViewDataSource {

var baby = [“宝宝0″,”宝宝1″,”宝宝2″,”宝宝3″,”宝宝4″,”宝宝5″,”宝宝6″,”宝宝7″,”宝宝8″,”宝宝9″,”宝宝10″,”宝宝11”]

var babyImage = [“宝宝0.jpg”,”宝宝1.jpg”,”宝宝2.jpg”,”宝宝3.jpg”,”宝宝4.jpg”,”宝宝5.jpg”,”宝宝6.jpg”,”宝宝7.jpg”,”宝宝8.jpg”,”宝宝9.jpg”,”宝宝10.jpg”,”宝宝11.jpg”]

var tableView = UITableView()
//标记图片是否已经被选中
var isFlag = [Bool](count : 12, repeatedValue: false)
override func viewDidLoad() {
super.viewDidLoad()
//之前这个地方定义的是var tableView局部变量,导致点了delete没反应
tableView = UITableView(frame: CGRectMake(0, 0, 320, 600), style: UITableViewStyle.Plain)
tableView.dataSource = self
tableView.delegate = self
self.view.addSubview(tableView)
}

func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
//每一块有多少行
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return baby.count
}
//绘制cell
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let initIdentifier = “Cell”
let cell = UITableViewCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier: initIdentifier)
//下面两个属性对应subtitle
cell.textLabel?.text = baby[indexPath.row]
cell.detailTextLabel?.text = “baby\(indexPath.row)”

//添加照片
cell.imageView?.image = UIImage(named: babyImage[indexPath.row])
cell.imageView!.layer.cornerRadius = 40
cell.imageView!.layer.masksToBounds = true

//添加附件
cell.accessoryType = UITableViewCellAccessoryType.DetailButton
if isFlag[indexPath.row] {
cell.accessoryType = UITableViewCellAccessoryType.Checkmark
}else{
cell.accessoryType = UITableViewCellAccessoryType.None
}
return cell
}

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
//使用闭包,和嵌套函数或者JAVA中的匿名类类似
let locationActionHandler = {(action: UIAlertAction!) -> Void in
let locationAlertController = UIAlertController(title: nil, message: “我是宝宝\(indexPath.row)”, preferredStyle: UIAlertControllerStyle.Alert)
let okAction = UIAlertAction(title: “OK”, style: UIAlertActionStyle.Default, handler: nil)

locationAlertController.addAction(okAction)
self.presentViewController(locationAlertController, animated: true, completion: nil)

}
let alertController = UIAlertController(title: “Baby\(indexPath.row)”, message: nil, preferredStyle: UIAlertControllerStyle.ActionSheet)
let cancleAction = UIAlertAction(title: “Cancle”, style: UIAlertActionStyle.Cancel, handler: nil)
alertController.addAction(cancleAction)

let locationAction = UIAlertAction(title: “宝宝是几号”, style: UIAlertActionStyle.Default, handler: locationActionHandler)
alertController.addAction(locationAction)

let markAction = UIAlertAction(title: “标记宝宝我一下”, style: UIAlertActionStyle.Default, handler: {(action: UIAlertAction) -> Void in
let cell = tableView.cellForRowAtIndexPath(indexPath)
//此时可以将图片标记为勾,但是当往下拖动图片之前被标记的勾消失,是因为每次只加载出现在屏幕上的,其它都放在缓存池
cell?.accessoryType = UITableViewCellAccessoryType.Checkmark
self.isFlag[indexPath.row] = true//然后每次加载时候在cellForRowAtIndexPath方法进行判断
})
alertController.addAction(markAction)
presentViewController(alertController, animated: true, completion: nil)
}
//和下一个方法中实现deleteAction效果是一样的
// func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
// if editingStyle == UITableViewCellEditingStyle.Delete{
// self.baby.removeAtIndex(indexPath.row)
// self.babyImage.removeAtIndex(indexPath.row)
// self.isFlag.removeAtIndex(indexPath.row)
// self.tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Middle)
// }
// }

//分享和删除功能的实现
func tableView(tableView: UITableView, editActionsForRowAtIndexPath indexPath: NSIndexPath) -> [UITableViewRowAction]? {
let shareAction = UITableViewRowAction(style: UITableViewRowActionStyle.Default, title: “Share”, handler: {
(action: UITableViewRowAction,indexPath: NSIndexPath) -> Void in
let menu = UIAlertController(title: nil, message: nil, preferredStyle: UIAlertControllerStyle.ActionSheet)

let cancelAction = UIAlertAction(title: “Cancle”, style: UIAlertActionStyle.Cancel, handler: nil)
let facebookAction = UIAlertAction(title: “facebook”, style: UIAlertActionStyle.Default, handler: nil)

let twitterAction = UIAlertAction(title: “twitter”, style: UIAlertActionStyle.Default, handler: nil)
menu.addAction(facebookAction)
menu.addAction(twitterAction)
menu.addAction(cancelAction)
self.presentViewController(menu, animated: true, completion: nil)
})
let deleteAction = UITableViewRowAction(style: UITableViewRowActionStyle.Default, title: “Delete”, handler: {
(action: UITableViewRowAction,indexPath: NSIndexPath) -> Void in

self.baby.removeAtIndex(indexPath.row)
self.babyImage.removeAtIndex(indexPath.row)
self.isFlag.removeAtIndex(indexPath.row)
self.tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Left)
})

return [shareAction,deleteAction]
}

//每个cell的高度
func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
return 80
}
//隐藏bar
override func prefersStatusBarHidden() -> Bool {
return true
}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}

}

4.运行结果:

%title插图%num

5.总结

学习Swift一周了,基本是通过看视频,看相关的文档进行学习,不过目前的进度是任重而道远。此外还要抽空学学OC,毕竟OC现在仍然是iOS的主流。在学习过程中发现Swift2.0版的开源项目好少,并且Swift2.0与之前的版本语法差别也很大,只能通过看官方文档进行学习。目前的学习计划就是主要学Swift,同时补补OC的基础知识,加油~