天天看點

iOS屬性傳值(視圖控制器viewController的執行順序的了解和懶人加載的了解)

在iOS中傳值簡單說就是把一個視圖控制器上的控件内容傳送到另一個視圖控制器控件上,并使其顯示.

傳值的方法有許多種:屬性,方法,協定(本質是targetAction),targetAction,本地存儲,單例(針對記憶體),消息傳值(本質是單例).

今天的這篇隻說兩種:屬性與方法

首先建立2個ViewController:MainViewController,SecondViewController

iOS屬性傳值(視圖控制器viewController的執行順序的了解和懶人加載的了解)

MainViewController中,建立一個button和一個文本輸入框TextField

SecondViewController中,建立一個label

我們要實作的是MainViewController中在TexrField輸入文本點選button,使文本顯示在SecondViewContrller中的label上

MainViewController中:先把TextField定義成屬性(名字叫tf)

iOS屬性傳值(視圖控制器viewController的執行順序的了解和懶人加載的了解)

建立完TextField和button不要忘記在viewDidLoad方法中調用下此方法:[self addsubviews];否則什麼都不會出現的

在給button添加點選事件

iOS屬性傳值(視圖控制器viewController的執行順序的了解和懶人加載的了解)

在這我要特别說明下,也是我們在開發中最需要注意的一個問題.我先說下什麼是懶人加載: 所謂的懶人加載就是:在你需要用到視圖的時候才會建立視圖.待我把mainViewContoller和SecondViewController視圖鋪好并且實作傳值功能之後的時候,你可以把我注釋掉得地方恢複下,再運作程式,你會發現:我們要傳的TextField上面的值并沒有傳到第二個頁面.為什麼呢?我會在最後具體說.

SecondViewController.h中:

iOS屬性傳值(視圖控制器viewController的執行順序的了解和懶人加載的了解)

SecondViewController.m中:UILabel設定成屬性(這個Label上的文本就要顯示mainVC中的TextFiled的内容)

iOS屬性傳值(視圖控制器viewController的執行順序的了解和懶人加載的了解)

完成傳值功能之後,回到我注釋的地方,為什麼在那個地方給SecondViewController對象的view指派完顔色,值就傳不過去了呢?要解釋這個問題我就先說下ViewController也就視圖控制器的執行流程,如果你在我注釋的地方設定個斷點,它會先調用initWithNibName方法(指派初始化,隻要是init就會調用該犯法),在調用viewload方法,最後調用viewDidload方法.現在我們就好了解我注釋的地方了,在執行設定view的背景([scond setBackgroundColor])語句時,secondViewcontroller就加載了視圖,運作了self.label.text = self.secondText;但是secondText的值還沒從TextFiled傳過來,然後才執行了MainVC.m的second.secondText = self.tf.label;總結一句話就是secondText在為空得時候就指派到了label,然後secondText傳來了TextField的值.