日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[Swift实际操作]八、实用进阶-(7)使用通知的方法进行对象间的消息传递

發布時間:2023/12/20 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [Swift实际操作]八、实用进阶-(7)使用通知的方法进行对象间的消息传递 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文將為你演示,如何使用Notification Center進行消息的傳遞。
通知中心是一個調度消息通知的類,采用單例設計模式,實現數據傳遞,回調等功能。
首先打開自定義視圖的代碼文件(CustomView.swift)

1 import UIKit 2 //使當前的自定義類,遵循文本輸入框代理協議 3 class CustomView: UIView,UITextFieldDelegate{ 4 //給自定義類添加一個文本框類型的屬性 5 var textField: UITextField! 6 7 //重寫初始化方法, 8 override init(frame: CGRect) 9 { 10 super.init(frame: frame) 11 //接著對文本框屬性進行初始化,并設置它的顯示區域 12 textField = UITextField(frame:CGRect(x: 0, 13 y: 0, 14 width: self.frame.size.width, 15 height: self.frame.size.height)) 16 //設置文本框字體大小 17 textField.font = UIFont.boldSystemFont(ofSize: 14) 18 //設置文本框字體顏色 19 textField.textColor = .purple 20 //設置文本框投影顏色 21 textField.layershadowColor = UIColor.black.cgColor 22 //設置文本框投影偏移距離 23 textField.layershadowOffset = CGSize(width: 0.0,height: 3.0) 24 //設置文本框的不透明度 25 textField.shadowOpacity = 0.45 26 //設置陰影的半徑大小 27 textField.shadowRadius = 3 28 //設置文本框大背景顏色 29 textField.backgroundColor = .lightGray 30 //設置文本框的代理對象 31 textField.delegate = self 32 33 //將文本框添加到自定義視圖之中 34 self.addSubview(textField) 35 } 36 37 //實現文本框代理協議中的方法,用來監聽鍵盤上的回車鍵被按下的事件 38 func textFieldShouldReturn(_ textField: UITextField) -> Bool 39 { 40 //獲得通知中心的單例對象,發送一條指定名稱的通知, 41 //并設置通知中心傳遞的數據為空。 42 NotificationCenter.default.post(name: NSNotification.Name(rawValue:"checkFormNotification"), 43 object: nil, 44 userInfo: nil) 45 return true 46 } 47 48 //需要實現指定的初始化方法 49 required init?(coder aDecoder: NSCoder) 50 { 51 fataError("init(coder:) has not been implemented") 52 } 53 54 override func didReciveMemoryWarning(){ 55 super.didReceiveMemoryWarning() 56 57 } 58 }

然后在左側的項目導航區,打開視圖控制器的代碼文件(ViewController.swift)

1 import UIKit 2 3 class ViewController: UIViewController{ 4 //添加兩個自定義視圖類型的屬性 5 var nameField: CustomView! 6 var passwordField: CustomView! 7 //添加一個提交按鈕,當點擊該按鈕時,提交整個表單。 8 var submitButton: UIButton! 9 10 override func viewDidLoad(){ 11 super.viewDidLoad() 12 13 //初始化兩個整形常量,作為自定義視圖的寬度和高度 14 let wid = Int(self.view.frame.size.width) - 40 15 let hei = 40 16 17 //然后對第一個自定義視圖屬性進行初始化,并設置它的顯示區域 18 nameField = CustomView(frame: CGRect(x: 20,y: 80,with: wid,height: hei)) 19 20 //對第二個自定義視圖屬性進行初始化,并設置它的顯示區域 21 passwordField= CustomView(frame: CGRect(x: 20,y: 140,with: wid,height: hei)) 22 23 //初始化提交按鈕屬性,并設置它的顯示區域 24 submitButton = UIButton(frame: CGRect(x: 20,y: 240,with: wid,height: hei)) 25 //設置按鈕在正常狀態下的標題文字 26 submitButton.setTitle("Sumbit",for: .normal) 27 //給按鈕對象綁定點擊事件 28 submitButton.addTarget(self, 29 action: #selector(ViewController.submitForm(_:)), 30 for: .touchUpInside) 31 //設置按鈕對象的背景顏色為灰色 32 submitButton.backgroundColor = .gray 33 //并設置按鈕對象為不會響應交互事件的狀態 34 //只有當文本框中的內容都被檢驗成功時,該按鈕的狀態才會恢復為正常。 35 submitButton.isEnabled = false 36 //將按鈕對象添加到當前視圖控制器的根視圖 37 slef.view.addSubview(submitButton) 38 39 //獲得通知中心的單例對象,并通過addObserver,對指定名稱的通知進行監聽, 40 //當收到指定名稱的通知時,調用選擇器中的checkForm方法。 41 NotificationCenter.default.addObserver(self, 42 action: #selector(ViewController.checkForm(_:)), 43 name: NSNotification.Name(rawValue:"ceckFormNotification"), 44 object: nil) 45 } 46 47 //當點擊按鈕時在控制臺輸出一條日志語句,模擬表單的動作 48 @objc func submitForm(_ sender: UIButton) 49 { 50 print("summitForm...") 51 } 52 53 //接著添加一個方法,用來響應自定義視圖中的文本框的回車鍵被按下的事件 54 func checkForm(_ notification: Notification?) 55 { 56 //當鍵盤中的回車鍵被按下時,對兩個自定義視圖中的文本框進行檢驗 57 if self.nameField.textField.text != "" && self.passwordField.textField.text != "" 58 { 59 //當兩個文本框中的內容都不為空時,恢復提交按鈕的可交互性, 60 //并調整按鈕的背景顏色為橙色 61 self.submitButton.isEnabled = true 62 submitButton.backgroundColor = .orange 63 } 64 else 65 { 66 //當兩個文本框中的內容有一個不為空,或者全部為空時,設置按鈕不可進行點擊 67 //背景顏色改為灰色。 68 self.submitButton.isEnabled = false 69 self.submitButton.backgroundColor = .gray 70 } 71 } 72 73 //在該類文件中,添加一個析構方法,當該類的實例對象被銷毀時, 74 //及時移除通知中心,以免造成資源的浪費 75 deinit 76 { 77 NotificationCenter.default.removeObserver(self) 78 } 79 80 override func didReciveMemoryWarning(){ 81 super.didReceiveMemoryWarning() 82 83 } 84 }

此時自定義視圖廣播了一條指定名稱的通知,并由控制器捕捉到了同名的通知。
由于兩個文本框中的內容不為空,所以按鈕對象的背景顏色變成了橙色。

轉載于:https://www.cnblogs.com/strengthen/p/9834598.html

總結

以上是生活随笔為你收集整理的[Swift实际操作]八、实用进阶-(7)使用通知的方法进行对象间的消息传递的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。