swift闭包传值-小demo

作者: 奇二世界 | 来源:发表于2016-06-13 20:34 被阅读902次

最近开始学习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)
    }
}

相关文章

  • swift闭包传值-小demo

    最近开始学习swift,今天学到闭包,来分享一个用闭包从后一个页面往前一个页面传值的小demo,其中包含了懒加载的...

  • Swift:基础(十六)闭包

    Swift 闭包 闭包(Closures)是自包含的功能代码块,可以在代码中使用或者用来作为参数传值。 Swift...

  • iOS swift 学习(二)

    Swift 闭包闭包(Closures)是自包含的功能代码块,可以在代码中使用或者用来作为参数传值。Swift 中...

  • Swift-传值坑

    Swift中block、代理、通知、单例传值 block传值 定义一个闭包实现block主要分三步: 定义一个闭包...

  • Learning iOS D7 2017-10-30(传值方式

    Swift 4 四种传值方式 一:闭包传值(子vc传给父vc) 1.声明一个闭包(子vc) var closure...

  • swift 闭包传值

    在oc 中,反向传值可以采用block块来实现,同样,在swift 中也有类似的闭包,下面就闭包传值进行简单的介绍...

  • Swift基础 : 闭包

    Swift 闭包 闭包(Closures)是包含功能的代码块, 可以在代码中使用或者用来作为参数传值 闭包的定义:...

  • swift传值

    本文将介绍swift中的传值方式:属性传值、代理传值、闭包传值、通知传值本文将在两个VC之间进行传值:HomeVC...

  • Swift 闭包 传值

    语法 以下定义了一个接收参数并返回指定类型的闭包语法: { (parameters) -> return type...

  • swift 闭包传值

    场景:A页面跳转到B页面,B页面返回到A页面,(B页面给A页面传值) B页面逻辑:创建block,声明变量,传值 ...

网友评论

    本文标题:swift闭包传值-小demo

    本文链接:https://www.haomeiwen.com/subject/fjwydttx.html