界面通信

//控制器1


importUIKit

//页面传值1:从前往后传

//页面传值2:(1)闭包传值

//(2)代理传值

classViewController:UIViewController{

letstr ="helloWorld"

overridefuncviewDidLoad() {

super.viewDidLoad()

navigationItem.title="控制器1"

//self写在哪个实例方法里面表示该实例,写在类方法里面表示该类

letrightBtn =UIBarButtonItem(title:"跳转", style: .Plain, target:self, action:"pushToSecond")

navigationItem.rightBarButtonItem= rightBtn

}

//右按钮的响应方法:跳转到第二个页面

func pushToSecond(){

let secondVC=SecondViewController()

secondVC.delegate=self

//属性传值

secondVC.oneStr=str

//实现闭包

secondVC.closure= {

(str:String)->Int

in

print("viewcontroller-value =\(str)")

return str.lengthOfBytesUsingEncoding(4)

}

navigationController?.pushViewController(secondVC, animated:true)

}

overridefuncdidReceiveMemoryWarning() {

super.didReceiveMemoryWarning()

// Dispose of any resources that can be recreated.

}

}

extensionViewController:secondProtocol{

func translateString(str:String) {

print("协议传值\(str)")

}

}




APPDelegate

@UIApplicationMain

classAppDelegate:UIResponder,UIApplicationDelegate{

//可选类型不能直接参与运算。要运算的话必须进行强制解包

varwindow:UIWindow?

funcapplication(application:UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject:AnyObject]?) ->Bool{

letVC =ViewController()

//创建导航视图控制器

letnavc =UINavigationController(rootViewController: VC)

window=UIWindow(frame:UIScreen.mainScreen().bounds)

window?.backgroundColor=UIColor.whiteColor()

//设置window根视图控制器

window?.rootViewController= navc

window?.makeKeyAndVisible()

returntrue

}


//控制器2

importUIKit

//定义协议

protocol secondProtocol{

func translateString(str:String)

}

class SecondViewController:UIViewController{

//定义一个接收从第一个页面传过来的字符串

var oneStr:String?

//声明一个传值闭包(给传过来的参数进行拼接)

var closure:((str:String)->Int)?

//声明代理

var delegate:secondProtocol?

override func viewDidLoad() {

super.viewDidLoad()

print(oneStr)

navigationItem.title="控制器2"

view.backgroundColor=UIColor.cyanColor()

//定义左边按钮

let leftBtn =UIBarButtonItem(title:"back", style: .Plain, target:self, action:"backAction")

navigationItem.leftBarButtonItem= leftBtn

}

//

func backAction(){

closure!(str:"第二个页面")

delegate?.translateString("secondVC")

navigationController?.popViewControllerAnimated(true)

}

overridefuncdidReceiveMemoryWarning() {

super.didReceiveMemoryWarning()

// Dispose of any resources that can be recreated.

}

/*

// MARK: - Navigation

// In a storyboard-based application, you will often want to do a little preparation before navigation

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

// Get the new view controller using segue.destinationViewController.

// Pass the selected object to the new view controller.

}

*/

}

你可能感兴趣的:(界面通信)