溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Your first iOS app(5)——Defining the Interaction

發(fā)布時間:2020-06-03 17:53:32 來源:網(wǎng)絡(luò) 閱讀:310 作者:三無青年 欄目:移動開發(fā)

Defining the Interaction

定義交互


在你布置完你的用戶界面后,你需要讓用戶與它進行交互。這就是控制器登場了??刂破鳎?strong>Controllers)支持你的視圖相應(yīng)用戶的操作和填充視圖內(nèi)容。控制器對象是一個管道,通過它視圖了解關(guān)于數(shù)據(jù)模型的改變,反之亦然。通過app的控制器,視圖被通知模型數(shù)據(jù)發(fā)生的改變,和控制器傳遞用戶發(fā)起的改變——舉個例子,在文本字段進行文本輸入——的模型對象。無論他們是響應(yīng)用戶操作還是定義導(dǎo)航,控制器實現(xiàn)你的app行為。


View Controllers

視圖控制器

在你構(gòu)建一個基礎(chǔ)的視圖層次后,你的下一步是控制可視化元素和用戶輸入的響應(yīng)。在一個app中,你使用視圖控制器(view controller (UIViewController))來管理內(nèi)容視圖和其中的子視圖層次。


一個視圖控制器不是視圖層次的一部分,且它也不是你的界面的元素。他管理層次結(jié)構(gòu)中的視圖對象并且提供他們行為。每個在故事板中構(gòu)建的內(nèi)容視圖的層次需要一個相應(yīng)的視圖控制器,負(fù)責(zé)管理界面元素和實現(xiàn)用戶交互響應(yīng)的任務(wù)。這通常意味著要為每個內(nèi)容視圖層次編寫一個自定義UIViewController的子類。如果你的app是一個多內(nèi)容視圖,你要為每個內(nèi)容視圖使用不同的自定義視圖控制器類。

視圖控制器扮演多個角色。它協(xié)調(diào)app的數(shù)據(jù)模型和視圖顯示數(shù)據(jù)之間的流,管理他們的內(nèi)容視圖的生命周期,并且處理當(dāng)設(shè)備旋轉(zhuǎn)后的方向。但是也許他們最重要的作用是對用戶輸入的響應(yīng)。

你也可以使用視圖控制器來實現(xiàn)從一個內(nèi)容類型到另一個內(nèi)容類型之間的轉(zhuǎn)換。因為app有一個有限的空間來顯示內(nèi)容,視圖控制器提供一個基本需要來從一個視圖控制器移除視圖并將其替換為另一個視圖。

想要在app中定義交互,需要使你的視圖控制器文件和在故事板中的視圖進行交流。你可以通過定義故事板和源代碼文件之間的連接做到這一點。(通過actions和outlets)。


Actions

動作

一個動作是一段代碼,這個代碼被連接到某種事件,而這種事件會在你的app上發(fā)生。當(dāng)以這個事件發(fā)生時,這段代碼被執(zhí)行。你通過定義動作來實現(xiàn)任何事情。通過操作數(shù)據(jù)來更新用戶界面。你使用動作來驅(qū)動app的流來響應(yīng)用戶或系統(tǒng)的事件。

你通過創(chuàng)建并實現(xiàn)一個帶有IBAction返回值和sender參數(shù)的方法來定義一個行為。


.-(IBAction)restoreDefaults:(id)sender;

.

sender參數(shù)所指向的對象負(fù)責(zé)觸發(fā)動作。IBAction返回類型是一個特殊的關(guān)鍵字;就像void關(guān)鍵字一樣,但它表明這個方法是將你的行為和故事板中的界面構(gòu)建起(Interface Bulider,IB。這就是關(guān)鍵字有IB前綴的原因)連接起來。你將在Tutorial: Storyboards中學(xué)習(xí)到更多地關(guān)于連接的IBAction動作到一個故事板中元素額只是。


Outlets

網(wǎng)點

網(wǎng)點提供了一條從你的界面引用對象的途徑——這個對象是你從源代碼文件添加到故事板中的。你從故事板中通過拖拽控制(Control-dragging)一個特定的對象到你的視圖控制器文件來創(chuàng)建一個網(wǎng)點,它讓你能在代碼運行時訪問并且操作這個對象。舉個例子,在第二個教程中,你將創(chuàng)建一個網(wǎng)點到你的ToDoList中的文本字段,以便它能夠訪問文本字段連接的代碼。

Outlets被定義為IBOutlet屬性。


.@property(weak,nonatomic)IBOutletUITextField*textField;

.

IBOutlet關(guān)鍵字告訴Xcode你能夠從IB總連接這個屬性。你將在中學(xué)習(xí)到更多的關(guān)于如何從故事板中連接一個outlet到源代碼中。


Controls

控件

控件 是用戶界面的一個對象,例如按鈕、滑塊或者開關(guān),用戶操作他們用來與內(nèi)容進行交互,提供輸入、app中的導(dǎo)航、以及執(zhí)行其他你定義的操作??丶槟愕拇a提供一條從用戶界面接收消息的途徑。

當(dāng)用戶與一個控件交互的時候,控件事件被創(chuàng)建??丶录砹烁鞣N物理手勢,這些手勢是用戶可以控制的,例如從空間上抬起手指、把手指放在空間上、以及觸摸一個文本字段。

事件類型有三大類:

觸摸并拖拽事件. 觸摸和拖拽事件是在用戶觸摸或拖拽一個控件的時候觸發(fā)。有幾種有效的觸摸事件階段。當(dāng)一個用戶初次用手指觸摸在按鈕上的時候,舉個例子,在內(nèi)側(cè)按下( Touch Down Inside)事件被觸發(fā);如果用戶拖動并離開這個按鈕,相應(yīng)的拖動事件被觸發(fā)。當(dāng)用戶手指在按鈕邊框之內(nèi)的時候抬起手指,在內(nèi)側(cè)抬起事件( Touch Up Inside)被發(fā)送。如果用戶在抬起手指之前已經(jīng)離開按鈕范圍,觸摸有效性被取消,在外側(cè)抬起(Touch Up Outside)事件被觸發(fā)。

編輯事件. 當(dāng)一個用戶編輯文本字段的時候,編輯事件發(fā)生。

值改變事件. 當(dāng)用戶操作控件,導(dǎo)致它發(fā)出一系列不同的值的時候,只改變事件發(fā)生。


當(dāng)你定義這些交互的時候,要知道app中每一個控件的相關(guān)動作,然后在你的界面中使你的用戶明確控件的目標(biāo)。


Navigation Controllers

導(dǎo)航控制器

如果app有多個內(nèi)容視圖層次,你需要能夠在它們之間進行轉(zhuǎn)換。為此,你將使用一個專門類型的視圖控制器:導(dǎo)航控制器(UINavigationController)。一個導(dǎo)航控制器管理一些列的視圖控制器向前或向后轉(zhuǎn)換,例如在iOS 郵件應(yīng)用程序中用戶在郵件賬戶、收信箱以及個人郵件中穿梭。

一組視圖控制器通過特定的導(dǎo)航控制器進行管理被稱為當(dāng)行棧。導(dǎo)航棧是一個后進先出的自定義視圖控制器對象的集合。第一個項目被添加到棧中稱為根視圖控制器,它永遠(yuǎn)不會從棧中彈出。其他的視圖控制器能被壓入或彈出導(dǎo)航棧。

雖然導(dǎo)航控制器的主要工作時管理內(nèi)容視圖控制器的顯示,但它也負(fù)責(zé)其本身的自定義視圖。具體的說,它顯示一個導(dǎo)航條——這個視圖位于屏幕的上方,它提供關(guān)于用戶所在的導(dǎo)航層次的環(huán)境——它包含一個后退按鈕以及其他你自定義的按鈕。每個被添加到導(dǎo)航棧中視圖控制器都顯示在這個導(dǎo)航條上。你要負(fù)責(zé)導(dǎo)航條的配置。

你一般不需要為把視圖控制器彈出導(dǎo)航棧做任何事情;返回按鈕通過導(dǎo)航控制器為你提供了這個功能。然而,你必須手動將視圖控制器壓入棧。你能在故事板中做到這點。


Use Storyboards to Define Navigation

使用故事板定義導(dǎo)航器

迄今為止,你已經(jīng)學(xué)習(xí)了關(guān)于使用故事板在app創(chuàng)建單個的屏幕內(nèi)容。現(xiàn)在,你將學(xué)習(xí)關(guān)于如何使用他們在app中定義多個場景之間的流。

在第一個教程中,你只在一個場景中工作。在到多數(shù)app種,一個故事板是由一系列的場景組成的,每個場景代表一個視圖控制器和他的視圖層次。場景是通過繼續(xù)箭頭(segues)連接的,它代表兩個視圖控制器之間的過渡:起源和目的地。


你可以創(chuàng)建幾種類型的segue:

壓棧. 壓棧segue添加目的視圖控制器到導(dǎo)航棧。壓棧segue只有在源視圖控制器鏈接一個導(dǎo)航控制器的時候才能使用。

模態(tài).模態(tài)segue是簡單的將一個視圖控制器呈現(xiàn)在另一個視圖控制器上,要求用戶在返回到app的主要流(flow)之前在呈現(xiàn)的控制器上執(zhí)行一些操作。模態(tài)視圖控制器不能被添加到導(dǎo)航棧;相反,它通常被認(rèn)為是當(dāng)前呈現(xiàn)視圖控制器的子視圖。當(dāng)前呈現(xiàn)的視圖控制器負(fù)責(zé)它創(chuàng)建并顯示的模態(tài)視圖控制器。

自定義. 你可以通過子類化UIStoryboardSegue來定義你自己的過渡。

展開(Unwind). unwind segue向后移動一個或多個segue來返回到用戶現(xiàn)存的視圖控制器實例。你使用unwind segues來實現(xiàn)反向?qū)Ш健?/span>


除了segues,場景也通過關(guān)系(relationship)來進行連接。例如,導(dǎo)航控制器和他的根視圖控制器之間存在一個關(guān)系。在這種情況下,關(guān)系代表導(dǎo)航控制器包含根師徒控制器。

當(dāng)你用故事板來規(guī)劃app的用戶界面的時候,確定一個視圖控制器標(biāo)記為初始視圖控制器是非常重要的。在運行的時候,這個視圖控制器包含的視圖會在app加載的第一時間被顯示,并且是能過渡到其他視圖控制器的必有內(nèi)容視圖。

現(xiàn)在你已經(jīng)學(xué)習(xí)了在故事板中的視圖和視圖控制器上操作的基本知識。在下一個教程中,是時候要把這些知識融入到ToDoList應(yīng)用程序中了。

Designing a User Interface

Tutorial: Storyboards

Copyright 2014 Apple Inc. All rights reserved. Terms of Use | Privacy Policy | Updated: 2013-10-22


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI