pop怎么传值 swift_swift中pop - CSDN
  • swift闭包传值

    2015-10-18 10:55:06
    swift中闭包可以像object-c中 block一样传值. 两个控制器 ViewController 和 SecondViewController , SecondViewController反向传值给ViewController. 点击NavigationbBar 的返回键(相当于pop操作) ...

    swift中闭包可以像object-c中 block一样传值.

    两个控制器  ViewController 和 SecondViewController , SecondViewController反向传值给ViewController.


    点击NavigationbBar 的返回键(相当于pop操作)

    运行结果



    展开全文
  • segue跳转传值返回回调回返传值segue跳转传值,返回,回调回返传值 segue跳转常用方法 segue 显示模式 segue传递数据(参数)方法 segue返回方法 segue返回传值 segue跳转方法一,直接跳转 在storyboard中,右击第...

    segue跳转传值,返回,回调回返传值

    • segue跳转常用方法
    • segue显示模式
    • segue传递数据(参数)方法
    • segue返回方法
    • segue返回传值
    segue跳转方法一,直接跳转
    在storyboard中,右击第一个控制器视图中的按钮(或其他控件)拖动到目标控制器视图,在弹出菜单中,选择一个显示模式即可。
    segue跳转方法二,代码跳转
    1、在storyboard中,选中目标页面,通过最上方的Detail View Controller拖拽到主页面进行segue关联(比如关联到Present Modally)
    右键点击目标视图头部黄色的标志(有一个图标中的左边的那个),在出现的菜单中选择“Present Modally”旁边的圆圈,在圆圈上按住左键拖动到主页面。
    或者,右键点击主页面视图头部黄色的标志,拖动到目标控制器视图,在弹出的菜单中,选择“Present Modally”。

    2、选中关联线,设置segue的 Identifier 属性(这里设置为“goP2Segue”)。

    注意,必须要为 segue 设置Identifier属性,否则程序会崩溃。

    3、在代码中需要跳转处,执行performSegue方法

    self.performSegue(withIdentifier: “goP2Segue”, sender: self)

    segue显示模式
    在iPhone上可以用到的有modal、push和custom,其他还有几种是iPad上用的:
    1、modal:模态地加载视图控制器,最常用的方式,类似present和dismiss;
    2、push:使用导航栏压进新的视图控制器,类似push和pop,要使用这个模式,跳转的源视图,也就是主控制器必须是Navigation Controller,否则会报错;
    3、custom:用户自定义。
    segue传递数据(参数)
    覆写prepare(for segue: UIStoryboardSegue, sender: Any?)
    示例代码
    //segue传值示例代码
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        //传值到P1
        if segue.identifier == "goP1Segue"{//判断是哪个segue被触发
            //设置目标控制器
            let controller = segue.destination as!P1ViewController
            controller.str = "这是segue传值过来的字符串"//直接设置目标控制器的变量
        }
        //传值到P2
        if segue.identifier == "goP2Segue"{
            let controller = segue.destination as! P2ViewController
            controller.str = "这是segue传值过来的字符串2"//直接设置目标控制器的变量
        }
    }
    segue返回方法
    一、dismiss方法返回
    示例代码
    //注意:不能在Navigation中使用!!!
    self.presentingViewController!.dismiss(animated: true, completion: nil)
    二、回调返回(Unwind Segue)
    1、在主页面控制器中写一个@IBAction修饰的回调的方法
    //segue回调方法,获取返回参数
    @IBAction func backSegue(segue : UIStoryboardSegue){
        if segue.identifier == "backMainForP1"{
            //获取返回的控制器
            let backVC = segue.source as! P1ViewController
            mainLabel.text = backVC.backSting//获取返回值
        }
        if segue.identifier == "backMainForP2"{
            //获取返回的控制器
            let backVC = segue.source as! P2ViewController
            mainLabel.text = backVC.backSting//获取返回值
        }
    }
    2、把exit中的回调方法关联到自己的ViewController,(或者直接关联到返回的按钮或其他控件),然后执行performSegue方法:
    @IBAction func backMainVC(_ sender: Any) {
        //segue回调返回,把exit中的回调方法关联到自己的ViewController:
        //关联方法:右击顶部左起第三个图标,选择其中的回调方法,拖到左边第一个按钮,然后点击manual
        //如果直接把exit中的回调函数拖到返回按钮,则将立即执行返回,按钮函数中的执行结果有可能不能被回调
        backSting = "这是P1返回的字符串"
        //如果直接关联到exit,下面的performSegue方法不需要
        performSegue(withIdentifier: "backMainForP1", sender: nil)
    }
    segue返回传值
    返回传值与跳转传值类似,直接在回调方法中获取返回控制器中的属性值
    示例代码
    //segue回调方法,获取返回参数
    @IBAction func backSegue(segue : UIStoryboardSegue){
        if segue.identifier == "backMainForP1"{
            //获取返回的控制器
            let backVC = segue.source as! P1ViewController
            mainLabel.text = backVC.backSting//获取返回值
        }
        if segue.identifier == "backMainForP2"{
            //获取返回的控制器
            let backVC = segue.source as! P2ViewController
            mainLabel.text = backVC.backSting//获取返回值
        }
    }
    本文示例代码:https://github.com/zzx1688/segue_ios_demo
    展开全文
  • 要实现代理传值,我们先来看一下需求 通过点击提交进入第二个页面,点击返回pop到第一个页面,并且用代理和block 传回一个值.

    要实现代理传值,我们先来看一下需求
    这里写图片描述这里写图片描述
    通过点击提交进入第二个页面,点击返回pop到第一个页面,并且用代理和block
    传回一个值.
    我们先来看第二个页面的代码:

    import UIKit
    //定义协议
    protocol loginDelegate{
        //无参无返回值代理方法
        func test()
        //有参无返回值方法
        func test2(name:String)
        //有两个参数无返回值代理方法
        func test3(name:String,age:Int)
        //有参有返回值代理方法(返回两个值)
        func test4(name:String,age:Int)->(String,Int)
    }
    //定义block(有参无返回值)
    typealias block = (str:String)->Void
    
    class LoginViewController: UIViewController {
        //定义属性
        var name:String!
        var delegate:loginProtocol!
        var myBlock:block!
    
        override func viewDidLoad() {
            super.viewDidLoad()
            self.view.backgroundColor = UIColor.whiteColor()
            print(name)
    
            let btn:UIButton = UIButton(type: UIButtonType.System)
            btn.frame = CGRectMake(20, 100, 300, 30)
            btn.setTitle("返回", forState: UIControlState.Normal)
            btn.backgroundColor = UIColor.cyanColor()
            btn.addTarget(self, action: "backBtnClicked", forControlEvents: UIControlEvents.TouchUpInside)
            self.view.addSubview(btn)
        }
        //点击返回按钮实现方法
        func backBtnClicked() {
        //调用代理方法,并且赋值
            self.delegate.test()
            self.delegate.test2("我是代理传过来的值")
            self.delegate.test3("teddy", age: 20)
            self.delegate.test4("Andy", age: 18)
            self.myBlock(str:"我是block传值")
            self.navigationController?.popViewControllerAnimated(true)
        }
        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
            // Dispose of any resources that can be recreated.
        }
    }

    ViewController.swift页面的代码:

    import UIKit
    
    //遵守协议loginDelagate
    class ViewController: UIViewController,loginDelegate {
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            let label:UILabel = UILabel.init()
            label.frame = CGRectMake(20, 80, 100, 30)
            label.text = "姓名:"
            label.textAlignment = NSTextAlignment.Center
            label.textColor = UIColor.blueColor()
            label.font = UIFont.systemFontOfSize(14)
            label.backgroundColor = UIColor.cyanColor()
            self.view.addSubview(label)
    
            let textTF:UITextField = UITextField.init()
            textTF.frame = CGRectMake(140, 80, 200, 30)
            textTF.borderStyle = UITextBorderStyle.RoundedRect
            textTF.placeholder = "输入姓名"
            self.view.addSubview(textTF)
    
            let btn:UIButton = UIButton(type: UIButtonType.Custom)
            btn.frame = CGRectMake(20, 120, 200, 30)
            btn.addTarget(self, action: "btnClicked", forControlEvents: UIControlEvents.TouchUpInside)
            btn.backgroundColor = UIColor.blueColor()
            btn.setTitle("提交", forState: UIControlState.Normal)
            self.view.addSubview(btn)
        }
        func btnClicked() {
    //        let loginVC:MyTableViewController = MyTableViewController()
    //        self.navigationController?.pushViewController(loginVC, animated: true)
    
    //跳转页面的同时实现代理
            let loginV:LoginViewController = LoginViewController()
            //代理
            loginV.delegate = self
            //block
            loginV.myBlock = {a in
                print(a)
            }
            self.navigationController?.pushViewController(loginV, animated: true)
        }
        //实现代理方法
        func test() {
            print("我是代理传值")
        }
        func test2(name: String) {
            print(name)
        }
        func test3(name: String, age: Int) {
            print(name,age)
        }
        func test4(name: String, age: Int) -> (String, Int) {
            print(name,age)
            return (name,age)
        }
        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
            // Dispose of any resources that can be recreated.
        }
    }
    展开全文
  • UINavigatioUInController的基本用法和页面传值几种方式本文介绍UINavigationController基本用法,因为涉及多页面顺便介绍页面传值1、手写代码创建UINavigationController手写方式创建很简单 , 首先创建一个项目 ,...

    UINavigationController的基本用法和页面传值几种方式

    本文介绍UINavigationController基本用法,因为涉及多页面顺便介绍页面传值


    1、手写代码创建UINavigationController

    手写方式创建很简单 , 首先创建一个项目 , 默认是从storyboard 加载的。这时候首先去掉默认加载方式 。
    这里写图片描述

    然后在AppDelegate.swiftdidFinishLaunchingWithOptions 中创建
    代码如下:

    
        func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
            // Override point for customization after application launch.
    
            //在这里用代码来创建NavigationController
            window = UIWindow(frame: UIScreen.mainScreen().bounds)
            window?.makeKeyAndVisible()
    
            UINavigationBar.appearance().tintColor = UIColor.whiteColor()
            UINavigationBar.appearance().barTintColor = UIColor(red: 231.0/255.0, green: 95.0/255.0, blue: 53.0/255.0, alpha: 0.3) //修改导航栏背景色
            UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName:UIColor.whiteColor()] //为导航栏设置字体颜色等
            let rootCv = ViewController();
            let nav = UINavigationController(rootViewController: rootCv)
            window?.rootViewController = nav
    
            return true
        }
    

    不要一看这么多代码,其实没这么多 。UINavigationBar 开头的都是为这个导航栏设置的样式。完全可以不要用默认的,主要就5行 ,前两行创建window 并让window显示 , 后三行创建导航控制器 , 并设置跟控制器 ,然后把window的根控制器设置成这个导航控制器 。这样就OK了。

    运行后发现有黑框 ,暴力解决 ,设置下背景色就行了 。然后再添加个 BarButtonItem 什么的

      self.view.backgroundColor = UIColor.whiteColor()
            self.navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Next", style: .Plain, target: self, action: "goNext:")
            self.title = "导航标题"  //设置导航栏title(不是  self.navigationController?.title 哦!)
            self.navigationItem.backBarButtonItem = UIBarButtonItem(title: "我把返回修改了", style: .Plain, target: nil, action: nil)

    这里最后一句是修改了返回的BarButtonItem 文字 , 这里设置了标题,又加了个rightBarButtonItem 注册了事件goNext 我们来实现下。

    func goNext(sender:AnyObject){
            print("去下一个咯")
            let mainVc = UIStoryboard(name: "Third", bundle: nil).instantiateViewControllerWithIdentifier("three") as UIViewController
            self.navigationController?.pushViewController(mainVc, animated: true)
        }

    一看这个又晕了 ,中间那些是什么呀 。。首先我们从storyboard创建了一个控制器(手写的看过了,为了多学点知识) ,这里的instantiateViewControllerWithIdentifier 中的three 如下设置
    这里写图片描述

    然后push进去 。 导航控制器是采用栈的方式先进后出 , 用push和pop 。那个storyboard 中很简单就放了一个Label 和一个Button ,等会再介绍那个 ,先看看效果

    这里写图片描述

    然后我们给那个按钮也注册个事件 ,这里直接拖就行了。
    实现如下

     @IBAction func showTabBar(sender: AnyObject) {
            let mainVc = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("second") as! UINavigationController
            self.presentViewController(mainVc, animated: true) { () -> Void in
    
            }
        }

    这里还是从storyboard 中加载控制器 , 但是却用了presentViewController ,因为导航控制器不让push导航控制器 ,这边主要是像演示通过storyboard 创建导航控制器

    2、 通过storyboard 创建UINavigationController

    如果你跟我一样用Main.storyboard , 可以先删除默认的那个控制器 , 从右边拖出来一个UINavigationController ,这个会默认带一个UITableViewController , 删掉,拖一个普通的UIViewController 。选中UINavigationController 右键拖到那个UIViewController 选择rootViewController就行了 。然后可以自己拖BarButtonItem 也可以在代码中写 。我这边是拖进来的
    这里写图片描述

    就是这么拖的 , 因为我这边拖过了就不再拖了,注册事件也是拖,跟button一样的。就不再演示 。

    这时候运行效果。
    这里写图片描述

    这里是用presentViewController 弹出的返回用dismissViewControllerAnimated

     @IBAction func goBack(sender: UIBarButtonItem) {
            self.dismissViewControllerAnimated(true) { () -> Void in
                print("返回")
            }
        }

    导航控制器基本操作很简单 ,下面看下载不同页面中正反传值

    3、页面传值的几种方式

    • 正面反面传值 (协议)

    大家看到那个页面我们放了三个按钮和一个输入框 ,按钮都注册了事件。然后手写了一个新的控制器 ,里面是一个返回按钮和几个label 还有一个输入框 。

    当我们点击第一个按钮的时候进入下一个控制器 , push进去的 ,那个控制器有个方法 。

    func  passParams(tmpStr: String){
            lb.text = tmpStr
        }

    所以我们在push前,调用这个方法正面传值, 当然你可以直接给他的共有属性赋值。

    let vc = ViewControllerFour()
    let value = tf1.text
    vc.passParams(value!)
            self.navigationController?.pushViewController(vc, animated: true)

    很简单, lb.text = tmpStr 会把传过来的值赋值给label

    反向传值这里使用了代理,先声明一个协议

    protocol ParameterDelegate{
        func passParams(tmpStr: String)
    }

    然后在我们第一个页面实现这个协议 。实现对应的方法

        func passParams(tmpStr: String){
            tf1.text = tmpStr
        }

    然后在第二页面声明代理为自己的变量

     var delegate:ParameterDelegate?

    在push之前把自己设置为第二个页面的代理

      let vc = ViewControllerFour()
     vc.delegate = self  //通过代理进行反向传值
     let value = tf1.text
     vc.passParams(value!)
            self.navigationController?.pushViewController(vc, animated: true)

    注意到没,比刚才多一句话

    OK ,这样就搞定了。来看效果 !
    这里写图片描述

    • 第二种方法 (通过segue进行的传值)

    直接通过storyboard拖拽, 话说storyboard做界面还真方便 , 需要好好研究一下

    重新拖一个控制器然后连线,我这边已经拖好了,我就演示下连线

    这里写图片描述
    然后在代码中

      //通过segue进行的传值
        override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
            if segue.identifier == "toshow" {
                let vc = segue.destinationViewController as! ViewControllerTwoShow
                vc.tmpStr = tf1.text
                //vc.setValue(tf1, forKey: "tmpStr")
            }
        }

    在目标控制器中定义了变量tmpStr (后面会把代码分享出来)

    看下效果
    这里写图片描述

    • 通过通知的方式
        let vc = ViewControllerFour()
            vc.delegate = self  //通过代理进行反向传值
    
            self.presentViewController(vc, animated: true) { () -> Void in
    //发布一条通知NSNotificationCenter.defaultCenter().postNotificationName("DefaultNotif", object:self.tf1.text)
            }

    先注册一个通知 , 展现界面完成的时候发布一个通知 。在另一个界面的viewWillAppear接收通知 。

     override func viewWillAppear(animated: Bool) {
            //self.navigationController?.hidesBarsOnSwipe = true
            self.navigationController?.setNavigationBarHidden(true, animated: true) //隐藏导航栏
    
            NSNotificationCenter.defaultCenter().addObserver(self, selector: "doSomeT:", name: "DefaultNotif", object: nil)
        }

    对应方法

    func doSomeT(title:NSNotification){
            lb1.text = title.object as? String
        }

    看看效果 :
    这里写图片描述

    大概就这么多吧 , 最后把源码发上来吧, 语文不太好估计没讲清楚,大家可以看源码。以后源码都放这个地址了(觉得还行的话给个star 哦)
    githubSwiftStudy

    展开全文
  • 原文地址:https://blog.csdn.net/iotjin/article/details/49681595第一个界面 A ,第二个界面B ,从 B 传值 给AB界面.h#import <UIKit/UIKit.h>//第一步 写协议@protocol passValueDelegate &lt...
  • swift详解之十二-----------------泛型

    千次阅读 2016-04-13 15:49:27
    泛型注:本文详细讲解泛型,对写一些公共方法,共用的东西的时候很有帮助。想成为一个优秀的程序员吗?这个必须掌握泛型代码可以让你写出根据自我需求定义、适用于任何类型的,灵活可重用的函数和类型。...
  • iOS原生界面与RN界面互调及传值

    千次阅读 2019-01-04 16:56:44
    iOS原生与RN互调及传值3.1 RN跳转原生界面3.2 RN跳转原生界面并传值3.3 RN跳转原生界面并传值后,原生界面再回调给RN界面相关信息3.4 原生界面传值给RN页面 3. iOS原生与RN互调及传值 3.1 RN跳转原生界面 iOS端: ...
  • iOS页面间的几种传值方式

    千次阅读 2015-12-02 11:13:49
    这就需要用到属性传值、block传值 那么第一个视图控制器如何获的第二个视图控制器的部分信息 例如:第一个界面中的lable显示第二个界面textField中的文本 这就需要使用代理传值 页面间传值有八大传值方式,下面...
  • WWDC2015已经过去一段时间了,我发现自从更新了Swift2.0到现在的Swift2.2,我只是跟着版本更新了所有需要更新的语法,依旧自以为是很熟练的Swift程序员。刚入职比较闲碰巧看到了1月份的中国首届Swift大会上大牛们的...
  • - (void) goBackToPersonInfoVCWithNickName:(NSString *) nickName{ // [self.navigationController popViewControllerAnimated:YES]; //此页面已经存在于self.navigationController.viewControllers
  • iOS 如何pop到指定页面

    千次阅读 2016-08-02 11:06:17
    当我们做app的时候有时候会遇到这样的需求,根视图是A一个“个人信息” 页面,点击...修改后我们需要Pop到B视图,然而苹果给我们提供的有两种方法 1、推出到根视图控制器 [objc] view plain copy
  • 点击上方“iOS开发”,选择“置顶公众号”关键时刻,第一时间送达! 先不说楚枫的这般年纪,能够踏入元武一重说明了什么,最主要的是,楚枫在刚刚踏入核心地带时,明明只是...
  • iOS开发中两个界面之间用Block传值

    千次阅读 2015-10-26 09:23:16
    刚学iOS开发,开此贴记录学习中的一些问题,以便日后参考
  • 值传递方式: 将第二页里面的值, 在pop的时候传递回来给首页. 本文的操作流程: 首页 push –> 第二页 pop –> 首页 PS: 第二页有个 UITextField 用于输入文本信息, 然后把第二页录入的信息传回首页. OC代码 第二页...
  • 使用Block的地方很多,在使用的时候经常会...其中传值只是其中的一小部分,下面介绍Block在两个界面之间的传值: 先说一下block在方法中的使用,主要是将block当做是参数放在方法中,这样使用的时候就是使用的代码块。
  • 在日常开发过程中我们为了使这个项目,页面精简 美观易懂,往往采用组件式开发,会对一个复杂的完整页面分割成一个个UI view ,UItableviewcell 等控件类,或者我们会在某些网络请求回调 和异步操作跳转页面。...
  • swift自定义转场动画(比较有难度)

    千次阅读 2016-05-01 01:18:23
    一 转场效果图和采用转场方式1 转场效果图 :2 采用方式 (方法):—-> 2.1 自定义转场动画—-> 2.2 协议二 转场实现需要获取的东西1 获取转场前图片的frame2 设置一张临时imageView作为转场图片(图片并不是真实存在的)...
  • ******阅读完此文,大概需要15分钟****** 一、项目背景 一套完备的路由方案是推进VivaVideo产品的组件化进程前提,为了能够为VideoVideo量身定做一套适合自己的路由方案,我做了一定的调研分析,我特意找了市场几...
  • iOS-swift-自定义弹框

    千次阅读 2018-05-16 18:56:55
    弹框(在这里使用了 Spring动画框架) Spring动画可以参考我的这篇文章 ... 界面中间的弹框 // // SmileAlert.swift // H56580E2E // // import UIKit import Spring class SmileAl...
  • 项目中有注册和修改密码功能,一量
1 2 3 4 5 6
收藏数 119
精华内容 47
关键字:

pop怎么传值 swift