• swift-传值 2018-04-02 20:22:09
    //2个界面传值 界面1 /传值 //需求2个类传值传值有通知,属性,delegate,闭包; import UIKit //遵守代理 class ViewController: UIViewController,TwoMessageDelegate { let textlable = UILabel(); let TwoVc...
    delegate,通知,闭包
    //2个界面传值
    界面1
    
    ```
    /传值
    //需求2个类传值传值有通知,属性,delegate,闭包;
    import UIKit
    //遵守代理
    class ViewController: UIViewController,TwoMessageDelegate {
    
        
        let textlable = UILabel();
         let TwoVc = TwoViewController();
        
        
        
        override func viewDidLoad() {
            super.viewDidLoad()
            
            
            self.title = "首页";
            
            textlable.frame = CGRect(x:50,y:100,width:self.view.frame.size.width-100,height:30);
            textlable.textColor = UIColor.black;
            textlable.textAlignment = NSTextAlignment.center;
            textlable.backgroundColor = UIColor.red;
            textlable.text = "我要这这段话传给另一个界面"
           // textlable.frame = (x:100, y:100,witdh:self.view.frame.size.width,height:30);
          
            self.view .addSubview(textlable);
            
            
            let btn = UIButton();
            btn.frame = CGRect(x:50,y:150,width:100,height:30);
            btn.setTitle("跳转下一页", for: UIControlState.normal);
            btn.setTitleColor(UIColor.blue, for: UIControlState.normal);
            btn.addTarget(self, action:#selector(btnOnlick), for: UIControlEvents.touchUpInside);
            self.view .addSubview(btn);
          //闭包传值
            self.TwovcClouse();
          //通知传值
            self.TwoVCNotiftion();
            
        }
    
        
        //点击事件
        @objc func btnOnlick(){
         
            //属性传值
            TwoVc.string = self.textlable.text!;
            //
            TwoVc.delegate = self;
            self.navigationController?.pushViewController(TwoVc, animated: true);
            //静态跳转
    //        self.present(, animated: , completion:  Void)?##(() -> Void)?##() -> Void#>)
            
            
        }
        
        
        //界面二代理实现
        func getMessage(controller: TwoViewController, string: String) {
            self.textlable.text = string;
            
        }
        //界面二闭包传值
         func TwovcClouse(){
            
            //闭包
            TwoVc.twoVcClouse = {(_ text:String) ->Void in
                print("闭包传过来的值为\(text)");
                self.textlable.text = text;
            }
        }
        
        func TwoVCNotiftion(){
            let NotifTwoVCaiton = NSNotification.Name(rawValue:"TWoVc");
            NotificationCenter.default.addObserver(self, selector: #selector(upDataChange(notif:)), name: NotifTwoVCaiton, object: nil);
        }
        
        //接收到后执行的方法
        @objc func upDataChange(notif: NSNotification) {
            guard let text: String = notif.object as! String? else { return }
            self.textlable.text = text;
        }
    //移除通知
        deinit {
            NotificationCenter.default.removeObserver(self);
        }
        
    ```
    界面2
    
    ```
    //反向传值:1用delegate,和闭包
    import UIKit
    //代理步骤1
    protocol TwoMessageDelegate:NSObjectProtocol
    {
        //步骤2定义生命函数
        func getMessage(controller:TwoViewController,string:String)
        
        
    }
    
    //闭包
    typealias TwoViewControllerClosure = (_ text:String) ->Void
    
    class TwoViewController: UIViewController {
    
        var string:String = "";
        //代理变量
        var delegate:TwoMessageDelegate?;
        //闭包变量
        var twoVcClouse:TwoViewControllerClosure?;
        //通知
        let NotifMycation = NSNotification.Name(rawValue:"TWoVc");
        
        override func viewDidLoad() {
            super.viewDidLoad()
            self.title = "界面二";
            let textlable = UILabel();
            
            textlable.frame = CGRect(x:50,y:100,width:self.view.frame.size.width-100,height:30);
            textlable.textColor = UIColor.black;
            textlable.textAlignment = NSTextAlignment.center;
            textlable.backgroundColor = UIColor.red;
            if string.isEmpty {
                print("空")
                textlable.text = "字符串为空";
            }else{
                  textlable.text = self.string;
            }
         
            self.view .addSubview(textlable);
            
            
            let btn = UIButton();
            btn.frame = CGRect(x:50,y:150,width:100,height:30);
            btn.setTitle("返回上一页", for: UIControlState.normal);
            btn.setTitleColor(UIColor.blue, for: UIControlState.normal);
            btn.addTarget(self, action:#selector(btnOnlick), for: UIControlEvents.touchUpInside);
            self.view .addSubview(btn);
            
            
            
            
        }
       //传值给上一个界面用闭包和代理分别试试
        @objc func btnOnlick(){
            //代理写法
           // self.TwoVCdeleage();
            
            //闭包写法
            //self.TwoVcClosure();
    
            //通知
            self.TwoVcNotiftiaction();
        
            self.navigationController?.popViewController(animated: true);
            //静态返回
            //self.dismiss(animated: , completion:  Void)?##(() -> Void)?##() -> Void#>)
        }
        
        func TwoVCdeleage() {
            
                    if delegate != nil {
                        //传值
                        delegate?.getMessage(controller: self, string: "我是界面二传给你的值?");
                    }
            
        }
        
        func TwoVcClosure() {
                    if twoVcClouse != nil  {
                        twoVcClouse!("我是用闭包传值的");
                    }
            
        }
        func TwoVcNotiftiaction(){
            
            //单个值
            NotificationCenter.default.post(name: NotifMycation, object:"我是通知给你传的值收到木")
            //多个值用(name: NotifMycation, object: nil, userInfo: ["" : ""])
        }
        
    ```
    展开全文
  • 一、视图控制器间正向传值 1、正向传值有两种方式:第一种是通过属性传值,第二种是通过构造方法传值 2、通过属性传值: let vc = ViewController()  vc.data = "通过dada属性传值"  self.present(vc...
  • iOS 为现有工程接入flutter-基础配置篇 Flutter-Api Flutter框架基础 ...本文主要实现内容为 swift和flutter互相传值 核心传值方法类似webview传值中通过桥接方式实现 ######swift 工程代码,以vc示...
  • UINavigatioUInController的基本用法和页面传值几种方式本文介绍UINavigationController基本用法,因为涉及多页面顺便介绍页面传值1、手写代码创建UINavigationController手写方式创建很简单 , 首先创建一个项目 ,...
  • Swift的四种传值方式总结 2018-10-31 19:11:20
    Swift 的四种传值方式 有 单例, 代理,闭包(oc的block),通知. 1 单例 Swift 的单例简单到怀疑他的正确性.步骤如下:(下面有具体代码)  第一步 创建 SingleTest static let shareInstance = SingleTest()  第二步 ...
  • 解决:present出的页面,通过闭包传值,在闭包中不能present页面的问题//页面A //页面A: 有一个按钮,点击按钮通过闭包传回当前按钮的名称 var shareAndGetClosure: ((String) -> Void)! @IBAction func ...
  • 1、通过Main.storyboard 用鼠标拖拽控件到需要跳转的页面,选择 Present Modally 实现界面跳转 2、跳转到Main.storyboard 创建了 View Controller 关联代码ViewController 的界面 3、跳转到代码ViewController ...
  • Swift 使用presentViewController 跳转页面后显示黑屏 原因:storyboard 制作页面 和 纯代码页面,需要使用两种不同方法进行页面跳转 Storyboard 界面:使用代码跳转 let sb = UIStoryboard(name: "Main", ...
  • [self presentViewController: animated: completion:] 创建一个目标控制器的实例,并在推送之后于viewController中创建它,此时viewController为...而假设我们从A present到B,后由B再present到A,则再次推送的A已
  • 第一个VC import UIKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() let secondViewController = SecondViewController() ... secondViewC
  • segue跳转传值返回回调回返传值segue跳转传值,返回,回调回返传值 segue跳转常用方法 segue 显示模式 segue传递数据(参数)方法 segue返回方法 segue返回传值 segue跳转方法一,直接跳转 在storyboard中,右击第...
  • 副标题:.xib文件的界面与.storyboard的界面相互跳转 一、.storyboard文件的界面跳转到.xib文件的界面 0.回顾:沿用上一篇文章里.storyboard的界面。... 1.下面新建蓝色界面文件(.xib) ...前台界面(BlueViewCont.....
  • Swift 闭包传值 反向传值 2017-03-07 16:35:46
    RT A界面 接收B界面返回的时候的值 A界面  let vc = CZHourPicker()    vc.backClosure = {(backStr: String) -> Void in ... self.durationBtn.setTitle(backStr, for: UIControlS
  • 跳转Push时的Controller为 UIViewControllerPresent时的Controller为 UINavigationController使用 Storyboard Segue 方式:在Storyboard中设置Segue的Identifier,以及Kind然后使用代码:performSegue(withIdentifier...
  • 该项目主要介绍了oc与swift之间、swift内部几种常见的传值方式(属性传值、代码块传值、代理传值、通知) 如果oc与swift之间的桥接有疑问请参考:OC与swift桥接互调 项目介绍 1、swift之间的页面跳转与返回...
  • 1新建类选择Swift 的时候, 会出现是否选择生成类似这样的头文件, 选择生成,(用于Swift类调用Oc的类使用的) 2 在Oc的类中声明 工程的名字加上-Swift.h 类似 3 接下来进入下一个界面的方法就都一样啦。 ...
  • OC与swift的数据传输 2018-08-10 20:02:33
    该项目主要介绍了oc与swift之间、swift内部几种常见的传值方式(属性传值、代码块传值、代理传值、通知) 如果oc与swift之间的桥接有疑问请参考:OC与swift桥接互调 项目介绍 1、swift之间的页面跳转与返回...
  • 本文主要小小的研究了IOS中自定义容器的实现以及里面的一些API(ios custom View Controller、iOS container View Controller) 包括一下API addChildViewController: removeFromParentViewController ...
  • 1新建类选择Swift 的时候, 会出现是否选择生成类似这样的头文件, 选择生成,(用于Swift类调用Oc的类使用的) 2 在Oc的类中声明 工程的名字加上-Swift.h 类似 3 接下来进入下一个界面的方法就都一样啦。 ...
  • swift页面传值 2016-11-23 15:15:02
    属性传值: 创建连个控制器 ViewController和SecondViewController 在SecondViewController写个公开的属性 var string = String() 在ViewController  let secongViewController : ...
1 2 3 4 5
收藏数 92
精华内容 36