最近開始學習swift,今天學到閉包,來分享一個用閉包從后一個頁面往前一個頁面?zhèn)髦档男emo,其中包含了懶加載的使用,方便以后復習。
首先在 AppDelegate.swift 中給控制器添加導航欄
//
// AppDelegate.swift
// Swift02-2
//
// Created by 奇二世界 on 16/6/13.
// Copyright ? 2016年 YMN. All rights reserved.
//
import UIKit
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
self.window!.backgroundColor = UIColor.whiteColor()
self.window!.makeKeyAndVisible()
//定義一個視圖控制器
let vc = ViewController()
//創(chuàng)建導航控制器
let naVC = UINavigationController(rootViewController: vc)
//設置根視圖
self.window?.rootViewController = naVC
// Override point for customization after application launch.
return true
}
接下來在ViewController中添加button和label;
button 和 label 是用 swift 的懶加載實現(xiàn);
注意閉包傳值的步驟哦。
//
// ViewController.swift
// Swift02-2
//
// Created by 奇二世界 on 16/6/13.
// Copyright ? 2016年 YMN. All rights reserved.
//
import UIKit
class ViewController: UIViewController {
/*
懶加載格式:
lazy var 變量名:變量類型 = {
let 名字 = 變量類型()
return 名字
}()
*/
// 懶加載按鈕
lazy var btn:UIButton = {
let btn = UIButton(frame: CGRectMake(150, 200, 50, 50))
// btn.backgroundColor = UIColor.redColor()
btn .setTitle("跳轉", forState: UIControlState.Normal)
btn.addTarget(self, action: "btnAction:", forControlEvents: UIControlEvents.TouchUpInside)
return btn
}()
// 懶加載label
lazy var lab:UILabel = {
let lab = UILabel(frame: CGRectMake(100, 100, 150, 30))
lab.backgroundColor = UIColor.greenColor()
return lab
}()
// viewDidLoad中添加控件
override func viewDidLoad() {
super.viewDidLoad()
// 添加btn / label
view.addSubview(btn)
view.addSubview(lab)
}
// 實現(xiàn)btn點擊方法
func btnAction(btn:UIButton){
print("點擊btn")
let secVC = SecondViewController()
// 閉包傳值-3.實現(xiàn)閉包方法,并執(zhí)行閉包
secVC.closure = {
(str:String) -> ()
in
self.lab.text = str
}
navigationController?.pushViewController(secVC, animated: true)
}
}
創(chuàng)建一個控制器 SecondViewController 繼承自UIViewController進行跳轉,在這個控制器中添加textField、button進行從后往前的傳值
//
// SecondViewController.swift
// Swift02-2
//
// Created by 奇二世界 on 16/6/13.
// Copyright ? 2016年 YMN. All rights reserved.
//
import UIKit
class SecondViewController: UIViewController {
// 閉包傳值-1.聲明閉包方法
var closure:((str:String) -> ())?
// 懶加載textField
lazy var tf:(UITextField) =
{
var tf = UITextField(frame: CGRectMake(100, 100, 100, 30))
tf.backgroundColor = UIColor.cyanColor()
return tf
}()
// 懶加載btn
lazy var btn:UIButton = {
let btn = UIButton(frame: CGRectMake(100, 200, 50, 50))
btn.backgroundColor = UIColor.redColor()
btn .setTitle("傳值", forState: UIControlState.Normal)
btn.addTarget(self, action: "btnAction:", forControlEvents: UIControlEvents.TouchUpInside)
return btn
}()
// viewDidLoad中添加 btn 和 textField
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = UIColor.whiteColor()
view.addSubview(tf)
view.addSubview(btn)
}
// 實現(xiàn)btn點擊方法
func btnAction(btn:UIButton){
// 閉包傳值-2.調用閉包傳值
closure!(str: tf.text!)
navigationController?.popViewControllerAnimated(true)
}
}