最近开始学习swift,今天学到闭包,来分享一个用闭包从后一个页面往前一个页面传值的小demo,其中包含了懒加载的使用,方便以后复习。
首先在 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()
//创建导航控制器
let naVC = UINavigationController(rootViewController: vc)
//设置根视图
self.window?.rootViewController = naVC
// Override point for customization after application launch.
return true
}
接下来在ViewController中添加button和label;
button 和 label 是用 swift 的懒加载实现;
注意闭包传值的步骤哦。
//
// 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)
}
// 实现btn点击方法
func btnAction(btn:UIButton){
print("点击btn")
let secVC = SecondViewController()
// 闭包传值-3.实现闭包方法,并执行闭包
secVC.closure = {
(str:String) -> ()
in
self.lab.text = str
}
navigationController?.pushViewController(secVC, animated: true)
}
}
创建一个控制器 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)
}
// 实现btn点击方法
func btnAction(btn:UIButton){
// 闭包传值-2.调用闭包传值
closure!(str: tf.text!)
navigationController?.popViewControllerAnimated(true)
}
}