Swift中的7種界面?zhèn)髦捣绞娇偨Y(jié)(屬性傳值,構(gòu)造器傳值,通知傳值,單例傳值,協(xié)議傳值,閉包傳值,NSUserDefaults傳值)

之前,我整理過OC的5種基本界面?zhèn)髦捣绞?很多朋友都有很喜歡,今天再整理一下Swift中的7種常用界面?zhèn)髦倒┐蠹覅⒖?不到之處驰吓,歡迎各位提點,更多的希望能對大家有所幫助.
注: 文中 ,第一個界面為ViewController,第二個界面為DetailViewController兩個界面都會分別有一個Button和一個TextFiled 用于輸入值和接受值.來查看傳值效果
兩個界面的簡單搭建及跳轉(zhuǎn)操作如下
//第一個界面ViewController
import UIKit
class ViewController: UIViewController {
fileprivate var tf:UITextField = UITextField()
  override func viewDidLoad() {
    super.viewDidLoad()

    setUpUI()

  }
 //點擊進入第二個界面的按鈕進行跳轉(zhuǎn)操作
 @objc fileprivate func btnAction()  {
    let vc = DetailViewController()
    navigationController?.pushViewController(vc, animated: true)
  }

  }

//設(shè)置界面
extension ViewController{
 fileprivate func setUpUI() {
    let btn = UIButton(frame: CGRect(x: 0, y: 0, width: 100, height: 30))
    btn.center = self.view.center
    btn.backgroundColor = UIColor.cyan
    btn.addTarget(self, action: #selector(btnAction), for: .touchUpInside)
    btn.setTitle("進第二個界面", for: UIControlState.normal)
    self.view .addSubview(btn)
    tf = UITextField(frame: CGRect(x: 0, y: 0, width: 100, height: 30))
    tf.center = self.view.center
    tf.frame.origin.y = 200
    tf.backgroundColor = UIColor.blue
    self.view.addSubview(tf)
  }

}


 //第二個界面DetailViewController

import UIKit

class DetailViewController: UIViewController {
    var tf:UITextField!

override func viewDidLoad() {
    super.viewDidLoad()
    self.view.backgroundColor = UIColor.white
    setUpUI()
}

//點擊按鈕返回上一界面
func btnAction()  {
 navigationController?.popViewController(animated: true)

}


extension DetailViewController{

fileprivate func setUpUI() {
  
    let btn = UIButton(frame: CGRect(x: 0, y: 0, width: 100, height: 30))
    btn.center = self.view.center
    btn.backgroundColor = UIColor.cyan
    btn.addTarget(self, action: #selector(btnAction), for: .touchUpInside)
    btn.setTitle("返回第一個界面", for: UIControlState.normal)
    self.view .addSubview(btn)
    tf = UITextField(frame: CGRect(x: 0, y: 0, width: 100, height: 30))
    tf.center = self.view.center
    tf.frame.origin.y = 200
    tf.text = tfStr
    tf.backgroundColor = UIColor.blue
    self.view.addSubview(tf)
}
}
上面??界面搭建,下面進行的幾種傳值操作都是以這兩個界面為基礎(chǔ)分別進行的
1.屬性傳值

屬性傳值的方式特別簡單,其實現(xiàn)的基本思路薇缅,就是為創(chuàng)建對象并為其屬性賦值丘侠,同樣的徒欣,我們模擬從第一個界面?zhèn)髦档降诙€界面,首先我們在第二個界面聲明一個String類型的tfStr屬性蜗字。

import UIKit
class DetailViewController: UIViewController {
var tf:UITextField!
 //String類型的tfStr屬性
var tfStr:String!
  
 override func viewDidLoad() {
    super.viewDidLoad()
  }
}

然后在處理第一個界面跳轉(zhuǎn)到第二個界面的方法中實例化第二個界面對象打肝,并為其屬性賦值脂新,如下所示

func btnAction()  {
let vc = DetailViewController()
    vc.tfStr = tf.text
 navigationController?.popViewController(animated: true)

}

接下來,我們即可直接在第二個界面中的viewDidLoad()方法中如下操作實現(xiàn)傳值粗梭。

 tf.text = tfStr

??你以學(xué)會屬性傳值

2.構(gòu)造器傳值

構(gòu)造器傳值争便,類似于OC的自定義初始化傳值,即在初始化某一個視圖控制器的時候断医,將需要傳遞的數(shù)據(jù)傳遞過去滞乙,因此,我們同樣可以模擬從第一個面?zhèn)髦档降诙€界面鉴嗤。
首先斩启,我們需要在第二個界面中,自定義構(gòu)造器醉锅,具體實現(xiàn)方式如下

class DetailViewController: UIViewController {
var tfStr:String!
var tf:UITextField!
override func viewDidLoad() {
    super.viewDidLoad()
    self.view.backgroundColor = UIColor.white
    setUpUI()
    
}

 // 析構(gòu)器

deinit {
    print(#function)
}
// 自定義構(gòu)造器
init(text:String) {
    print(#function)
    print(text)
    tfStr = text
    // 指定構(gòu)造器必須調(diào)用它最近父類的指定構(gòu)造器
    super.init(nibName: nil, bundle: nil)
}
// init(coder aDecoder: NSCoder) 方法是來自父類的指定構(gòu)造器, 因為這個構(gòu)造器是 required, 必須要實現(xiàn)兔簇。但是因為我們已經(jīng)重載了 init(), 定義了一個指定構(gòu)造器, 所以這個方法不會被繼承, 需要要手動覆寫。

required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}



func btnAction()  {

 navigationController?.popViewController(animated: true)

  }

}

自定義構(gòu)造器創(chuàng)建好之后荣挨,我們即可在第一個界面處理界面跳轉(zhuǎn)的方法中通過自定義構(gòu)造器創(chuàng)建對象并傳值了男韧,如下所示

//點擊鈕進行跳轉(zhuǎn)操作方法

@objc fileprivate func btnAction()  {
    let vc = DetailViewController(text: tf.text!)
    navigationController?.pushViewController(vc, animated: true)
    
}

??你以學(xué)會構(gòu)造器傳值

3.通知傳值

我們來看看通知傳值朴摊,通知可實現(xiàn)任意界面之間的數(shù)據(jù)傳遞默垄,但必須滿足一個條件,就是保證在發(fā)送通知的時候監(jiān)聽者已經(jīng)存在(先要注冊通知)甚纲。而通知的注冊與OC寫法有所不同Swift種主要通過NotificationCenter 而不是NSNotificationCenter通知中心實現(xiàn)(其實就是寫法不同)口锭,其為一個系統(tǒng)單例,系統(tǒng)提供了default方法獲取通知實例對象介杆。

通知使用步驟:注冊通知 -> 發(fā)送通知 -> 移除通知

通知實現(xiàn)的原理鹃操,我們可以這樣去理解,學(xué)生監(jiān)聽下課鈴聲春哨。我們把學(xué)生看做監(jiān)聽者(或者叫觀察者)荆隘,監(jiān)聽鈴聲,鈴聲一響就放學(xué)赴背。當(dāng)鈴聲響起時椰拒,我們看做發(fā)出一個通知(信號),學(xué)生在監(jiān)聽到鈴聲之后就會做出相應(yīng)的操作凰荚,比如放學(xué)之后做什么……

接下來我們看看通知傳值的具體實現(xiàn)方式燃观。這里我們模擬從第二個界面?zhèn)髦档降谝粋€界面

首先我們需要在第一個界面注冊通知,因為便瑟,程序運行肯定是先到第一個界面中缆毁,所以,當(dāng)在第二個界面發(fā)送通知的時候到涂,通知監(jiān)聽者肯定是存在的脊框。注冊通知的方法常用的有以下兩種:

//1.    open func addObserver(_ observer: Any, selector aSelector: Selector, name aName: NSNotification.Name?, object anObject: Any?)

//2.    open func post(name aName: NSNotification.Name, object anObject: Any?, userInfo aUserInfo: [AnyHashable : Any]? = nil)

第1種颁督,我們需要通過Selector參數(shù)設(shè)置接收到通知時觸發(fā)的方法。
而第2種浇雹,我們無需關(guān)聯(lián)觸發(fā)方法适篙,在方法尾部跟著一個閉包,當(dāng)接收到通知的時候該閉包會自動調(diào)用箫爷,我們可直接在閉包內(nèi)處理相應(yīng)的邏輯即可嚷节。第2種方法還有一個參數(shù)queue,該參數(shù)主要設(shè)置通知觸發(fā)方法執(zhí)行的隊列虎锚,其為OperationQueue類型的對象硫痰,這里我們一般在主隊列執(zhí)行,配置參數(shù)方法為OperationQueue.main窜护。我們可以直觀的看到效斑,在兩種方法中都有一個name參數(shù),該參數(shù)我們可以理解為通知的代號柱徙,通過這個代號我們可以避免多個通知串聯(lián)缓屠,這個參數(shù)我們可以賦值任意字符串。我們這里實例需要傳值而不是接到通知去進行一個事件所以這里以第2種為例护侮。

按照上面提到的通知使用步驟:
(1)注冊通知
注冊通知我們在第一個界面中

 NotificationCenter.default.addObserver(forName: NSNotification.Name?, object: Any?, queue: OperationQueue?) { (Notification) in
        //拿到Notification內(nèi)容進行邏輯處理....
    }

(2)發(fā)送通知
通知注冊好之后敌完,下一步我們就可以在第二個界面發(fā)送通知了,我們在處理界面跳轉(zhuǎn)(返回)的方法中處理這一邏輯羊初。發(fā)送通知主要用到以下方法:

open func post(name aName: NSNotification.Name, object anObject: Any?, userInfo aUserInfo: [AnyHashable : Any]? = nil)

這里需要注意滨溉,發(fā)送通知的aName參數(shù),必須和注冊通知時的name參數(shù)一致长赞,否則在第一個界面將無法接收到通知晦攒。我們可通過aUserInfo參數(shù)將需要傳遞的數(shù)據(jù)傳遞到第一個界面中,該參數(shù)為一個[NSObject : AnyObject]?(字典)類型的數(shù)據(jù)得哆。實現(xiàn)示例如下:

 func btnAction()  {

    NotificationCenter.default.post(name: NSNotification.Name(rawValue: "notifyName"), object: nil, userInfo: ["text": self.tf.text])
     navigationController?.popViewController(animated: true)

}

當(dāng)用戶點擊返回按鈕時脯颜,發(fā)送通知,第一個界面接收到對應(yīng)通知之后將會回調(diào)閉包贩据,我們可在閉包中獲得數(shù)據(jù)栋操,如下所示:

 class ViewController: UIViewController {
  fileprivate var tf:UITextField = UITextField()
  override func viewDidLoad() {
    super.viewDidLoad()

    NotificationCenter.default.addObserver(forName: NSNotification.Name(rawValue: "notifyName"), object: nil, queue: OperationQueue.main) { (text) in
//這里拿到通知傳來的數(shù)據(jù)text,然后進行邏輯處理,我們這里是為tf.text 賦值
        self.tf.text = "\(text.userInfo?["text"])"
    }
    setUpUI()
 
}

(3)移除通知
我們已經(jīng)基本實現(xiàn)通知傳值了,我們還需要最后一步乐设,移除通知讼庇,通知的移除我們可在界面釋放的方法(析構(gòu)方法)中去執(zhí)行,如下所示:

deinit {
    NotificationCenter.default.removeObserver(self)
}

??你以學(xué)會通知傳值

4.單例傳值

單例近尚,我們可以簡單理解為“一個類蠕啄,一個實例”。因此,不管我們在什么地方創(chuàng)建單例歼跟,所得到的都是同一個實例和媳,根據(jù)這一特點,我們可通過單例進行傳值哈街,但是注意的是留瞳,單例傳值,在我們獲取單例值的時候首先必須保證單例確實有值骚秦,因此她倘,我們可模擬通過單例實現(xiàn)從第一個界面?zhèn)髦档降诙€界面的場景。
要使用單例傳值作箍,我們必須得創(chuàng)建單例硬梁,首先我們需要建立一個Swift文件,建立步驟:command + n -> iOS ->Swift File胞得,為其取名為Singleton荧止。然后我們在該文件中構(gòu)造單例類,具體構(gòu)造方式如下:

import Foundation
class Singleton{
 // 單例屬性阶剑,用于傳值跃巡;
var text : String!
static let singleton = Singleton()
// 獲取單例實例方法
func share() -> Singleton {
    return .singleton
}

// 私有化init初始化方法,防止通過此方法創(chuàng)建對象
private init(){
  }

}

這里需要注意的是牧愁,我們可將需要傳遞的數(shù)據(jù)設(shè)置成單例的屬性素邪,如上述代碼中的text屬性。在第一個界面為其賦值之后我們就可以在第二個界面訪問了

//第一個界面賦值
 override func viewDidLoad() {
    super.viewDidLoad()

    setUpUI()
    let singleton = Singleton.singleton.share()
    singleton.text = "我叫MangoJ"
    
}
//第二個界面任意位置都可獲取單例屬性的值本例在viewDidLoad中
 override func viewDidLoad() {
    super.viewDidLoad()
    self.view.backgroundColor = UIColor.white
    tfStr = Singleton.singleton.share().text
    print(tfStr)
    setUpUI()
}

??你以學(xué)會單例傳值

5.協(xié)議傳值

協(xié)議傳值递宅,主要用于代理模式娘香。假設(shè)我們要實現(xiàn)從第二個界面?zhèn)髦档降谝粋€界面這一需求,首先办龄,我們需要擬定一份協(xié)議,為了方便淋昭,我們可直接在第二個界面中擬定協(xié)議俐填,如下所示:
基本步驟:
1.聲明協(xié)議
2.設(shè)置協(xié)議中的方法
3.聲明代理

import UIKit

//1.聲明協(xié)議
@objc protocol DetailViewControllerDelegate {
//2.設(shè)置協(xié)議中的方法
  @objc optional func viewController(viewController:DetailViewController,popWithValue:String)->Void
}

@objc關(guān)鍵字標(biāo)識該協(xié)議為一個可選協(xié)議;optional關(guān)鍵字標(biāo)識該協(xié)議方法對于協(xié)議的遵守者而言不是必須實現(xiàn)的翔忽。

聲明了協(xié)議之后英融,我們需要為第二個界面聲明一個代理屬性,如下所示:

class DetailViewController: UIViewController {
//3.聲明協(xié)議屬性
 // 代理屬性delegate值為實現(xiàn)了DetailViewControllerDelegate協(xié)議的任意對象歇式,weak關(guān)鍵字主要為了防止循環(huán)引用導(dǎo)致對象無法釋放驶悟。
weak var delegate : DetailViewControllerDelegate!
  

var tfStr:String!
var tf:UITextField!

override func viewDidLoad() {
    super.viewDidLoad()
    self.view.backgroundColor = UIColor.white
   
    setUpUI()
}

func btnAction()  {

 navigationController?.popViewController(animated: true)

  }

}

聲明了代理屬性之后,我們需要在處理界面跳轉(zhuǎn)(返回)的方法中處理協(xié)議傳值的邏輯了材失。首先我們需要判斷代理人是否存在痕鳍,可通過可選綁定來操作,如果代理存在,則讓代理執(zhí)行協(xié)議方法笼呆,并且將需要傳遞的信息通過參數(shù)傳遞給代理所在的界面熊响,如下所示:

func btnAction()  {

    if let delegate = self.delegate {
        delegate.viewController!(viewController: self, popWithValue: "MangoJ")
    }
    
 navigationController?.popViewController(animated: true)
    
}

切換到第一個界面中,在處理界面跳轉(zhuǎn)的方法中诗赌,我們將第二個界面的代理屬性設(shè)為第一個界面汗茄,如下所示:

  //點擊進入第二個界面的按鈕進行跳轉(zhuǎn)操作
 @objc fileprivate func btnAction()  {
  
    let vc = DetailViewController()
    //設(shè)置代理
    vc.delegate = self
    
    navigationController?.pushViewController(vc, animated: true)
    
}

然后,實現(xiàn)協(xié)議方法铭若,在協(xié)議方法中洪碳,我們可以直接獲取從第二個界面?zhèn)鬟f過來的值。

 // MARK:- DetailViewControllerDelegate -  
 func viewController(viewController: DetailViewController, popWithValue: String) {
    tf.text = popWithValue
}

??你以學(xué)會代理傳值

6.閉包傳值

閉包主要用于回調(diào)叼屠,這里我們還是模擬從第二個界面?zhèn)髦档降谝粋€界面偶宫,首先我們需要在第二個界面為閉包取個別名,聲明一個閉包類型环鲤,如下所示:
使用閉包的步驟:
1.聲明閉包類型
2.聲明閉包屬性
3.設(shè)置閉包傳值調(diào)用方法
4.賦值閉包屬性

import UIKit

class DetailViewController: UIViewController {
 // 1纯趋、聲明閉包類型
typealias ClosureName = (String)->()
// 2、聲明閉包屬性
var closure : ClosureName!

var tfStr:String!
var tf:UITextField!

override func viewDidLoad() {
    super.viewDidLoad()
    self.view.backgroundColor = UIColor.white
   
    setUpUI()
}

 3.設(shè)置閉包傳值調(diào)用方法
func callBack(closure:@escaping ClosureName)  {
    self.closure = closure
}

func btnAction()  {
  
      5冷离、可選綁定:判斷closure屬性是否不為nil吵冒,如果不為nil,則通過closure將文本信息回調(diào)到調(diào)用closure方法所在的控制器中西剥;
    guard (self.closure != nil) else {
        return
    }

    closure(tf.text!)
    
 navigationController?.popViewController(animated: true)

  }

}

現(xiàn)在第二個界面已經(jīng)配置完畢痹栖,最后一步,我們在第一個界面推送到第二個界面的方法中瞭空,通過實例化的第二界面對象揪阿,調(diào)用閉包回調(diào)方法,然后打印數(shù)據(jù)即可咆畏,該方法在第二界面返回到第一界面的時候會直接被調(diào)用南捂,代碼如下

 //第一個界面的如下方法中
@objc fileprivate func btnAction()  {
  
    let vc = DetailViewController()
 
    vc.callBack { (value) in
        self.tf.text = value
    }
    navigationController?.pushViewController(vc, animated: true)
    
}

??你以學(xué)會閉包傳值

7.NSUserDefaults傳值

UserDefaults為系統(tǒng)單例,通過UserDefaults傳值和自定義單例傳值原理基本一致旧找。對于UserDefaults傳值溺健,首先在獲取值的地方,必須保證單例實例key對應(yīng)的數(shù)據(jù)確實有值才行钮蛛,同樣的鞭缭,我們模擬從第一個界面?zhèn)髦档降诙€界面

使用步驟:
1.獲取UserDefaults單例實例
2.為UserDefaults實例設(shè)值
3.同步數(shù)據(jù)

在第一個界面的該方法中有如下操作

 @objc fileprivate func btnAction()  {
  
    // 獲取defaults單例實例
 let defaults = UserDefaults.standard
    //設(shè)值
    defaults.setValue(tf.text, forKey: "text")
    // 同步數(shù)據(jù)
    defaults.synchronize()
    
    let vc = DetailViewController()
 
    navigationController?.pushViewController(vc, animated: true)
    
}

在第二個界面的該方法中有如下操作

override func viewDidLoad() {
    super.viewDidLoad()
    self.view.backgroundColor = UIColor.white
    
   let defalts = UserDefaults.standard
    
    guard let text = defalts.object(forKey: "text") as! String? else {
        return
    }
    tfStr = text
    setUpUI()
}

通過UserDefaults傳值,不僅僅只局限于傳遞字符串類型的數(shù)據(jù)魏颓,同時可傳遞集合類型(字典岭辣、數(shù)組、集)或者基本數(shù)據(jù)類型的數(shù)據(jù)

??Swift7種常見界面間傳值整理完畢,供大家參考更希望大家多提寶貴意見.

如果看了對您有所幫助,希望可以點一下喜歡??!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末甸饱,一起剝皮案震驚了整個濱河市沦童,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖搞动,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件躏精,死亡現(xiàn)場離奇詭異,居然都是意外死亡鹦肿,警方通過查閱死者的電腦和手機矗烛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來箩溃,“玉大人瞭吃,你說我怎么就攤上這事』林迹” “怎么了歪架?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長霹陡。 經(jīng)常有香客問我和蚪,道長,這世上最難降的妖魔是什么烹棉? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任攒霹,我火速辦了婚禮,結(jié)果婚禮上浆洗,老公的妹妹穿的比我還像新娘催束。我一直安慰自己,他們只是感情好伏社,可當(dāng)我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布抠刺。 她就那樣靜靜地躺著,像睡著了一般摘昌。 火紅的嫁衣襯著肌膚如雪速妖。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天第焰,我揣著相機與錄音买优,去河邊找鬼。 笑死挺举,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的烘跺。 我是一名探鬼主播湘纵,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼滤淳!你這毒婦竟也來了梧喷?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎铺敌,沒想到半個月后汇歹,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡偿凭,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年产弹,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片弯囊。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡痰哨,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出匾嘱,到底是詐尸還是另有隱情斤斧,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布霎烙,位于F島的核電站撬讽,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏悬垃。R本人自食惡果不足惜游昼,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望盗忱。 院中可真熱鬧酱床,春花似錦、人聲如沸趟佃。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽闲昭。三九已至罐寨,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間序矩,已是汗流浹背鸯绿。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留簸淀,地道東北人瓶蝴。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像租幕,于是被迫代替她去往敵國和親舷手。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 1劲绪、通知傳值 首先我們來看看通知傳值男窟,通知可實現(xiàn)任意界面之間的數(shù)據(jù)傳遞盆赤,但必須滿足一個條件,就是保證在發(fā)送通知的時...
    Insit閱讀 3,292評論 0 2
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,163評論 25 707
  • 廢話不多說下面我們就簡單介紹下頁面間常用的幾種傳值方式,希望能給初學(xué)者帶來幫助: 注: 文中 ,第一個界面為Fi...
    MangoJ閱讀 5,487評論 14 94
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理凉唐,服務(wù)發(fā)現(xiàn)庸追,斷路器,智...
    卡卡羅2017閱讀 134,659評論 18 139
  • 獨自帶孩子旅行之南方之旅台囱,第一周結(jié)束淡溯。只能說結(jié)束,不能說完美結(jié)束簿训。因為實在是咱娶,太!累强品!人膘侮!了! 你知道嗎的榛?我還帶著...
    茉莉大大閱讀 194評論 1 1