swfit-block反向传值

//  ViewController.swift
//  Block

import UIKit

class ViewController: UIViewController {

    var myLabel = UILabel()
    override func viewDidLoad() {
        super.viewDidLoad()

        self.view.backgroundColor = UIColor.whiteColor()
        let btn = UIButton()
        btn.frame = CGRectMake(100, 300, 320, 50)
        btn.backgroundColor = UIColor.cyanColor()
        btn.setTitle("下一页", forState: UIControlState.Normal)
        btn.setTitleColor(UIColor.whiteColor(), forState: UIControlState.Normal)
        btn.addTarget(self, action: #selector(ViewController.nextBtnClicked), forControlEvents: UIControlEvents.TouchUpInside)
        self.view.addSubview(btn)
        myLabel.frame = CGRectMake(0, 100, 320, 50)
        myLabel.text = "Closure"
        myLabel.textAlignment = NSTextAlignment.Center
        self.view.addSubview(myLabel)
    }

    func someFunctionThatTakesAClosure(string:String) -> Void {

        myLabel.text = string
    }

    func nextBtnClicked(){

        let second = SecondViewController()
        //将当前someFunctionThatTakesAClosure函数指针传到第二个界面,第二个界面的闭包拿到该函数指针后会进行回调该函数
        second.initWithClosure(someFunctionThatTakesAClosure)
        second.BtnName = "点我点我点我"
        self.presentViewController(second, animated: true) {
        }
    }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

}
//  SecondViewController.swift
//  Block
import UIKit
typealias sendValueClosure=(string:String)->Void

class SecondViewController: UIViewController {

    var BtnName : String = String()
    var i:Int?
    //声明一个闭包
    var myClosure:sendValueClosure?
    //下面这个方法需要传入上个界面的someFunctionThatTakesAClosure函数指针
    func initWithClosure(closure:sendValueClosure?){
        //将函数指针赋值给myClosure闭包,该闭包中涵盖了someFunctionThatTakesAClosure函数中的局部变量等的引用
        myClosure = closure
    }
    override func viewDidLoad() {
        super.viewDidLoad()
        self.view.backgroundColor = UIColor.whiteColor()
        i = 0
        let btn = UIButton()
        btn.backgroundColor = UIColor.cyanColor()
        btn.frame = CGRectMake(0,100,320,50)
        let string : String = "点击我"
        if BtnName.characters.count == 0 {
            BtnName = string
        }
        btn.setTitle(BtnName ,forState:UIControlState.Normal)
        btn.setTitleColor(UIColor.whiteColor(), forState: UIControlState.Normal)
        btn.addTarget(self,action:#selector(SecondViewController.action), forControlEvents:UIControlEvents.TouchUpInside)
        self.view.addSubview(btn)

    }

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

    func action(){
        i = i!+1
        //判空
        if (myClosure != nil){
            //闭包隐式调用someFunctionThatTakesAClosure函数:回调。
            myClosure!(string: "好好哦\(i)")
        }
        self.dismissViewControllerAnimated(true, completion: nil)
    }

}
时间: 2024-08-30 03:10:49

swfit-block反向传值的相关文章

代理和block反向传值

代理传值: // SendViewController.h #import <UIKit/UIKit.h> @protocol SendInFor <NSObject> -(void)sendInForIdea:(NSString*)text; @end @protocol SendInForTwo <NSObject> -(void)sender:(NSString*)text; @end @interface SendViewController : UIViewC

ios开发的block反向传值

block 的反向传值,一直以来都是copy, 今天写出来用来加深印象, 也给一些懒哥们copy的方便些.不多说,直接上代码. #import <UIKit/UIKit.h> //第一步(第二个页面.h) typedef void (^secondVcBlock)(NSString*); @interface SecondViewController : UIViewController //第二步(第二个页面.h)声明一个属性 @property(nonatomic,copy)secondV

IOS Block 反向传值

1.在需要像上一个界面传值的.h 文件实现代理方法 @property (nonatomic, copy) void(^isOpenHandler)(BOOL) ; 2.在执行操作的时候需要江操作的结果反向传值给上个界面的时候调用Block if (self.isOpenHandler) { self.isOpenHandler(YES); } 3.在第一个视图控制器中 Push 的时候调用Block   接受回传回来的值 WM.isOpenHandler = ^(BOOL isopen){ i

block反向传值

A.m B.h B.m

反向传值实例

反向传值实例 1.代理反向传值 #import <UIKit/UIKit.h> //声明一个类 @class LHTableViewController; //声明一个协议 @protocol LHTableViewControllerDelegate <NSObject> //协议中的方法 -(void)LHTablieViewController:(LHTableViewController *)LHTablieViewController Color:(UIColor *)c

block 代码块 反向传值

block 代码块 也称作闭包 与C语言函数类似  具有反向传值.回调的功能 block公式分两种: ①声明和实现写到一块的公式 返回值类型(^block名字)(参数列表 参数类型 参数名) = ^(参数列表 参数类型 参数名){ 实现代码(如果有返回值 需要return 返回值类型的值) }; 调用:block名字(参数); ②声明和实现分开写的公式 (1)声明 返回值类型(^block名字)(参数列表); (2)实现 block名字 = ^(参数列表){ 实现代码(如果有返回值 需要retu

iOS Block界面反向传值

在上篇博客 <iOS Block简介> 中,侧重解析了 iOS Block的概念等,本文将侧重于它们在开发中的应用. Block是iOS4.0+ 和Mac OS X 10.6+ 引进的对C语言的扩展,用来实现匿名函数的特性.用维基百科的话来说,Block是Apple Inc.为C.C++以及Objective-C添加的特性,使得这些语言可以用类lambda表达式的语法来创建闭包.关于闭包,一句话解释简洁明了:闭包就是能够读取其它函数内部变量的函数. 在iOS开发中,Block有很多方面的用途,

iOS反向传值--Block方法

RootViewController代码如下: #import "RootViewController.h" #import "MyControl.h" #import "SecondViewController.h" #define kDebugPrint NSLog(@"%s",__func__) @interface RootViewController () {     UILabel *_label; } @end

控制器之间反向传值

控制器之间反向传值 委托(代理) 首先我们定下一个协议protocol 1. #import <Foundation/Foundation.h>2.3. @protocol ChangeText <NSObject>4.5. -(void)changeText:(NSString *)str;6. @end 控制器a遵守协议ChangeText,并实现协议的方法,控制器b公开自己的一个遵守协议ChangeText的属性delegate,在控制器a的视图转到控制器b的视图时,b.de

反向传值的几种常用方法

最近项目完成的差不多了,闲下来的时间突然心血来潮想自己写写以前没用过的方法.这里就包含了几种常见的反向传值的方法. 之所以现在专门自己写反向传值的博文记录,是因为之前几乎没怎么用到这些反向传值的方法,那么这里将会描述一下像"代理"."block"."通知"."单例"这四种传值方法. 首先是代理,也就是常看到的delegate.说的通俗点,就是委托一个对象,让其帮忙处理事情,说到底就是个中介的标志.详细方案如下: 在父类中调用其