IOS學習筆記(頁面傳值:屬性傳值,協議代理傳值,閉包傳值)
1.屬性傳值,代理協議傳值
建立檢視控制區,導航檢視控制器
在AppDelegate類下
func application()方法下
let vc = ViewController()
let navc = UINavigationController(rootViewController: vc)
window = UIWindow(frame: UIScreen.mainScreen().bounds)
window?.rootViewController = navc
window?.makeKeyAndVisible()
ViewController類下
var labelStr:UILabel?//設定全域性變數labelStr
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = UIColor.whiteColor() //設定背景顏色
navigationItem.title = "first"//設定導航欄標題
labelStr = UILabel(frame: CGRectMake(100, 300, 100, 30))//設定labelStr的座標,寬高
labelStr!.text = "海賊王"
labelStr!.textColor = UIColor.blackColor()
view.addSubview(labelStr!)
let nextBtn = UIButton(frame: CGRectMake(100, 400, 80, 30)) //設定按鈕
nextBtn.setTitleColor(UIColor.redColor(), forState: .Normal)
nextBtn.setTitle("下一頁", forState: UIControlState.Normal)
nextBtn.backgroundColor = UIColor.yellowColor()
nextBtn.addTarget(self, action: "leftBtn", forControlEvents: UIControlEvents.TouchUpInside)//設定nextBtn的點選事件
view.addSubview(nextBtn)
}
func leftBtn(){
let vc2 = ViewController2()
//屬性傳值
vc2.labelStr = labelStr!.text
//將當前控制器設定vc2的代理
vc2.delegate = self
navigationController?.pushViewController(vc2, animated: true)//跳轉到ViewController2
}
//完成協議內容
extension ViewController:secondProtocol{
func translateStr(str: String) {
//將ViewController的label.text 設定為 ViewController2 中的str
labelStr?.text = str
}
}
在ViewController2類下
import UIKit
//從後往前傳值的協議
protocol secondProtocol {
//需要傳什麼型別的引數,引數列表就寫什麼
func translateStr(str:String)
}
class ViewController2: UIViewController {
//定義代理屬性
var delegate:secondProtocol?
//定義一個labelStr屬性負責接收來自前一個頁面傳過來的值
var labelStr:String?
var textFeild:UITextField?
override func viewDidLoad() {
super.viewDidLoad()
navigationItem.title = "Second"
view.backgroundColor = UIColor.grayColor()
//設定文字框
textFeild! = UITextField(frame: CGRectMake(100, 300, 180, 30))
textFeild!.placeholder = "請輸入文字"
textFeild?.text = labelStr
view.addSubview(textFeild!)
//設定按鈕
let nextBtn = UIButton(frame: CGRectMake(100, 400, 80, 30))
nextBtn.setTitle("上一頁", forState: UIControlState.Normal)
nextBtn.setTitleColor(UIColor.redColor(), forState: .Normal)
nextBtn.backgroundColor = UIColor.yellowColor()
nextBtn.addTarget(self, action: "rightBtn", forControlEvents: UIControlEvents.TouchUpInside)
view.addSubview(nextBtn)
}
func rightBtn(){
//執行協議
delegate?.translateStr((textFeild?.text!)!)
navigationController?.popViewControllerAnimated(true)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
2.閉包傳值,用閉包傳值改變上一頁的背景顏色
ViewController類下
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
navigationItem.title = "first"
view.backgroundColor = UIColor.whiteColor()
let btn = UIButton(frame: CGRectMake(100, 100, 100, 50))
btn.layer.borderWidth = 2
btn.setTitle("Push", forState: .Normal)
btn.setTitleColor(UIColor.blackColor(), forState: .Normal)
btn.addTarget(self, action: "btn", forControlEvents: UIControlEvents.TouchUpInside)
view.addSubview(btn)
}
func btn(){
let vc2 = ViewController2()
//閉包的實現
vc2.color = {
(str:UIColor) -> Void
in
self.view.backgroundColor = str
}
navigationController?.pushViewController(vc2, animated: true)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
import UIKit
class ViewController2: UIViewController {
var color:((str:UIColor)->Void)?//設定閉包
override func viewDidLoad() {
super.viewDidLoad()
navigationItem.title = "Second"
view.backgroundColor = UIColor.whiteColor()
let btn = UIButton(frame: CGRectMake(100, 100, 100, 50))
btn.setTitle("Pop", forState: .Normal)
btn.setTitleColor(UIColor.blackColor(), forState: .Normal)
btn.layer.borderWidth = 2
btn.addTarget(self, action: "btn", forControlEvents: UIControlEvents.TouchUpInside)
view.addSubview(btn)
}
func btn(){
let str = UIColor.blueColor()//設定str為藍色
//呼叫閉包
color!(str: str)
navigationController?.popViewControllerAnimated(true)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
相關文章
- iOS Block傳值、代理傳值、通知中心iOSBloC
- iOS block 反向傳值iOSBloC
- vue父子傳值與非父子傳值Vue
- Java傳參傳值Java
- JavaWeb開發之頁面傳值JavaWeb
- 後臺向vue頁面傳值Vue
- 元件:非父子間傳值(同級傳值)元件
- Vue--子元件互相傳值,子元件來回傳值,傳值反覆橫跳Vue元件
- golang工作筆記(二)值傳遞與引用傳遞Golang筆記
- Flutter11 路由、頁面傳值、NavigatorFlutter路由
- Memory記憶體傳值記憶體
- 值傳遞和引用傳遞
- Vue 元件傳值Vue元件
- java值傳遞Java
- 按值傳遞
- 前端學習(2333):angular之元件傳值之子傳父前端Angular元件
- 前端學習(2332):angular之元件傳值之父傳子前端Angular元件
- [MUI] mui框架實現頁面間傳值UI框架
- Flutter多個頁面廣播通知傳值Flutter
- Vue 路由傳值(傳參)詳解Vue路由
- shared_ptr 傳值和傳引用
- 窗體傳值 父子窗體傳值情況 c# 1231C#
- Vue 元件間傳值Vue元件
- Fragment傳值到ActivityFragment
- Mybatis中List傳值MyBatis
- Java只有值傳遞Java
- 多頁面-HASH-頁面間傳值 Sloth-state
- Blazor和Vue對比學習(基礎1.3):屬性和父子傳值BlazorVue
- python中傳值和傳地址問題Python
- JavaScript的值傳遞和引用傳遞JavaScript
- 快速搞懂值傳遞與引用傳遞
- Java的值傳遞和引用傳遞Java
- 父往子傳,子往父傳,以及平行傳值
- JavaScript之按值傳遞JavaScript
- vue和react元件傳值VueReact元件
- Flutter 命名路由及傳值 !Flutter路由
- Vue之元件間傳值Vue元件
- python的賦值傳遞Python賦值
- 引數傳值機制