您好,登錄后才能下訂單哦!
Defining the Interaction
定義交互
在你布置完你的用戶界面后,你需要讓用戶與它進行交互。這就是控制器登場了。控制器(Controllers)支持你的視圖相應用戶的操作和填充視圖內容。控制器對象是一個管道,通過它視圖了解關于數據模型的改變,反之亦然。通過app的控制器,視圖被通知模型數據發生的改變,和控制器傳遞用戶發起的改變——舉個例子,在文本字段進行文本輸入——的模型對象。無論他們是響應用戶操作還是定義導航,控制器實現你的app行為。
View Controllers
視圖控制器
在你構建一個基礎的視圖層次后,你的下一步是控制可視化元素和用戶輸入的響應。在一個app中,你使用視圖控制器(view controller (UIViewController))來管理內容視圖和其中的子視圖層次。
一個視圖控制器不是視圖層次的一部分,且它也不是你的界面的元素。他管理層次結構中的視圖對象并且提供他們行為。每個在故事板中構建的內容視圖的層次需要一個相應的視圖控制器,負責管理界面元素和實現用戶交互響應的任務。這通常意味著要為每個內容視圖層次編寫一個自定義UIViewController的子類。如果你的app是一個多內容視圖,你要為每個內容視圖使用不同的自定義視圖控制器類。
視圖控制器扮演多個角色。它協調app的數據模型和視圖顯示數據之間的流,管理他們的內容視圖的生命周期,并且處理當設備旋轉后的方向。但是也許他們最重要的作用是對用戶輸入的響應。
你也可以使用視圖控制器來實現從一個內容類型到另一個內容類型之間的轉換。因為app有一個有限的空間來顯示內容,視圖控制器提供一個基本需要來從一個視圖控制器移除視圖并將其替換為另一個視圖。
想要在app中定義交互,需要使你的視圖控制器文件和在故事板中的視圖進行交流。你可以通過定義故事板和源代碼文件之間的連接做到這一點。(通過actions和outlets)。
Actions
動作
一個動作是一段代碼,這個代碼被連接到某種事件,而這種事件會在你的app上發生。當以這個事件發生時,這段代碼被執行。你通過定義動作來實現任何事情。通過操作數據來更新用戶界面。你使用動作來驅動app的流來響應用戶或系統的事件。
你通過創建并實現一個帶有IBAction返回值和sender參數的方法來定義一個行為。
.-(IBAction)restoreDefaults:(id)sender;
.
sender參數所指向的對象負責觸發動作。IBAction返回類型是一個特殊的關鍵字;就像void關鍵字一樣,但它表明這個方法是將你的行為和故事板中的界面構建起(Interface Bulider,IB。這就是關鍵字有IB前綴的原因)連接起來。你將在Tutorial: Storyboards中學習到更多地關于連接的IBAction動作到一個故事板中元素額只是。
Outlets
網點
網點提供了一條從你的界面引用對象的途徑——這個對象是你從源代碼文件添加到故事板中的。你從故事板中通過拖拽控制(Control-dragging)一個特定的對象到你的視圖控制器文件來創建一個網點,它讓你能在代碼運行時訪問并且操作這個對象。舉個例子,在第二個教程中,你將創建一個網點到你的ToDoList中的文本字段,以便它能夠訪問文本字段連接的代碼。
Outlets被定義為IBOutlet屬性。
.@property(weak,nonatomic)IBOutletUITextField*textField;
.
IBOutlet關鍵字告訴Xcode你能夠從IB總連接這個屬性。你將在中學習到更多的關于如何從故事板中連接一個outlet到源代碼中。
Controls
控件
控件 是用戶界面的一個對象,例如按鈕、滑塊或者開關,用戶操作他們用來與內容進行交互,提供輸入、app中的導航、以及執行其他你定義的操作。控件為你的代碼提供一條從用戶界面接收消息的途徑。
當用戶與一個控件交互的時候,控件事件被創建。控件事件代表了各種物理手勢,這些手勢是用戶可以控制的,例如從空間上抬起手指、把手指放在空間上、以及觸摸一個文本字段。
事件類型有三大類:
觸摸并拖拽事件. 觸摸和拖拽事件是在用戶觸摸或拖拽一個控件的時候觸發。有幾種有效的觸摸事件階段。當一個用戶初次用手指觸摸在按鈕上的時候,舉個例子,在內側按下( Touch Down Inside)事件被觸發;如果用戶拖動并離開這個按鈕,相應的拖動事件被觸發。當用戶手指在按鈕邊框之內的時候抬起手指,在內側抬起事件( Touch Up Inside)被發送。如果用戶在抬起手指之前已經離開按鈕范圍,觸摸有效性被取消,在外側抬起(Touch Up Outside)事件被觸發。
編輯事件. 當一個用戶編輯文本字段的時候,編輯事件發生。
值改變事件. 當用戶操作控件,導致它發出一系列不同的值的時候,只改變事件發生。
當你定義這些交互的時候,要知道app中每一個控件的相關動作,然后在你的界面中使你的用戶明確控件的目標。
Navigation Controllers
導航控制器
如果app有多個內容視圖層次,你需要能夠在它們之間進行轉換。為此,你將使用一個專門類型的視圖控制器:導航控制器(UINavigationController)。一個導航控制器管理一些列的視圖控制器向前或向后轉換,例如在iOS 郵件應用程序中用戶在郵件賬戶、收信箱以及個人郵件中穿梭。
一組視圖控制器通過特定的導航控制器進行管理被稱為當行棧。導航棧是一個后進先出的自定義視圖控制器對象的集合。第一個項目被添加到棧中稱為根視圖控制器,它永遠不會從棧中彈出。其他的視圖控制器能被壓入或彈出導航棧。
雖然導航控制器的主要工作時管理內容視圖控制器的顯示,但它也負責其本身的自定義視圖。具體的說,它顯示一個導航條——這個視圖位于屏幕的上方,它提供關于用戶所在的導航層次的環境——它包含一個后退按鈕以及其他你自定義的按鈕。每個被添加到導航棧中視圖控制器都顯示在這個導航條上。你要負責導航條的配置。
你一般不需要為把視圖控制器彈出導航棧做任何事情;返回按鈕通過導航控制器為你提供了這個功能。然而,你必須手動將視圖控制器壓入棧。你能在故事板中做到這點。
Use Storyboards to Define Navigation
使用故事板定義導航器
迄今為止,你已經學習了關于使用故事板在app創建單個的屏幕內容。現在,你將學習關于如何使用他們在app中定義多個場景之間的流。
在第一個教程中,你只在一個場景中工作。在到多數app種,一個故事板是由一系列的場景組成的,每個場景代表一個視圖控制器和他的視圖層次。場景是通過繼續箭頭(segues)連接的,它代表兩個視圖控制器之間的過渡:起源和目的地。
你可以創建幾種類型的segue:
壓棧. 壓棧segue添加目的視圖控制器到導航棧。壓棧segue只有在源視圖控制器鏈接一個導航控制器的時候才能使用。
模態.模態segue是簡單的將一個視圖控制器呈現在另一個視圖控制器上,要求用戶在返回到app的主要流(flow)之前在呈現的控制器上執行一些操作。模態視圖控制器不能被添加到導航棧;相反,它通常被認為是當前呈現視圖控制器的子視圖。當前呈現的視圖控制器負責它創建并顯示的模態視圖控制器。
自定義. 你可以通過子類化UIStoryboardSegue來定義你自己的過渡。
展開(Unwind). unwind segue向后移動一個或多個segue來返回到用戶現存的視圖控制器實例。你使用unwind segues來實現反向導航。
除了segues,場景也通過關系(relationship)來進行連接。例如,導航控制器和他的根視圖控制器之間存在一個關系。在這種情況下,關系代表導航控制器包含根師徒控制器。
當你用故事板來規劃app的用戶界面的時候,確定一個視圖控制器標記為初始視圖控制器是非常重要的。在運行的時候,這個視圖控制器包含的視圖會在app加載的第一時間被顯示,并且是能過渡到其他視圖控制器的必有內容視圖。
現在你已經學習了在故事板中的視圖和視圖控制器上操作的基本知識。在下一個教程中,是時候要把這些知識融入到ToDoList應用程序中了。
Designing a User Interface
Tutorial: Storyboards
Copyright 2014 Apple Inc. All rights reserved. Terms of Use | Privacy Policy | Updated: 2013-10-22
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。