swift场景转换2和委托

下面是3个视图控制器,用连线来进行跳转!还有一个是用id来进行跳转。如图选中线设置identifiter属性 ,把<去场景>按钮的identifiter 改成c

写一个A场景的视图控制器

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
//这是id 按钮的关联函数 @IBAction func jumpToB(sender: UIButton) { //还可以传值 performSegueWithIdentifier(
"B", sender: "kangkang") } override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { if(segue.identifier=="B"){ print(sender) } else if(segue.identifier=="c"){ print("to 场景") } } }

用委托实现更新数据如下图!点击button去b,然后点传值返回

写一个a场景的视图控制器


import UIkit
class
Aviewcontroll:UIViewController{ //var str:String="lable" @IBOutlet weak var mylabel: UILabel! override func viewDidLoad() { super.viewDidLoad() print("数据初始化lab:",mylabel.text) // mylabel.text= str // Do any additional setup after loading the view. } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } @IBAction func tojumpB(sender: UIButton) { let vc = self.storyboard?.instantiateViewControllerWithIdentifier("myAScene") as! BviewControll vc.delegate=self presentViewController(vc, animated: true, completion: nil) } //说明用上面的方式进行跳转时,不会执行prepareForSegue方法 override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { // let target = segue.destinationViewController as! BviewControll // target.delegate = self } } extension Aviewcontroll : BDelegate{ func b(controller: BviewControll, data:String){ print("\(data)") mylabel.text = data // str = data // print("数据:",str) } }

再写一个b场景的视图控制器

import UIKit

class BviewControll:UIViewController{
     var delegate: BDelegate?
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // Do any additional setup after loading the view.
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        
    }
    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
//      let target = segue.destinationViewController as! Aviewcontroll
//       self.delegate = target
        
    }
    
    @IBAction func jumptoA(sender: UIButton) {
//返回my self data 数据
delegate?.b(self, data:"my self data") dismissViewControllerAnimated(true, completion: nil) } }

再写一个delegate

import Foundation

protocol BDelegate{

    //    func someMethod()
    //这是为了满足ios开发中委托的标准写法,
    //并不是强制要求这样写,简单来说就是为了装逼
    
    //装逼标准:1.名字:delegate前面的内容,
    //2.第一个参数是对应的类型
    //3.真正需要传递的数据
    func b(controll:BviewControll,data:String)

}

这样就可以传值返回了label里就有值了!

 

posted @ 2016-01-07 20:55  爱学习~天天学习  阅读(529)  评论(0编辑  收藏  举报