iPhone应用程序编程指南(文本和Web)
關于文本和Web的支持
文本視圖
UIKit框架提供三個顯示文本內(nèi)容的基本類:
-
UILabel?顯示靜態(tài)文本字符串
-
UITextField?顯示單行可編輯文本
-
UITextView?顯示多行可編輯文本
雖然標簽和文本編輯框通常用于顯示相對少量的文本,但實際上這些類可以顯示任意數(shù)量的文本。
在使用可編輯的文本視圖時,您必須提供一個委托對象,負責管理編輯會話。文本視圖會向委托對象發(fā)送幾個不同的通告,讓它知道編輯何時開始,何時結束,并使它有機會重載某些編輯動作。
Web視圖
除了顯示內(nèi)容,您還可以用web視圖對象來顯示web表單,收集用戶輸入。和UIKit的其它文本類相似,如果您在web頁面的表單中有可編輯的文本框,則輕觸該文本框就會彈出鍵盤,用戶可以通過鍵盤輸入文本。這是web瀏覽整體體驗的一部分,web視圖會自行管理鍵盤的顯示和消除。
web視圖通過其關聯(lián)的委托對象提供有關網(wǎng)頁何時被裝載、及裝載過程是否發(fā)生錯誤的信息。web委托是指實現(xiàn)一個或多個UIWebViewDelegate協(xié)議方法的對象。您可以通過實現(xiàn)委托方法來響應裝載錯誤或處理一些與裝載有關的其它任務。
鍵盤和輸入法
每當用戶觸擊一個可以接受文本輸入的對象時,該對象就會請求系統(tǒng)顯示一個合適的鍵盤。根據(jù)用戶程序的需要和偏好的語言,系統(tǒng)可以顯示幾種不同的鍵盤。您的應用程序雖然不能控制用戶的偏好語言(因此也不能控制鍵盤的輸入法),但可以控制鍵盤的使用屬性,比如特殊鍵的配置及其行為。
您可以直接通過應用程序中的文本對象來配置鍵盤的屬性。UITextField和UITextView類都遵循UITextInputTraits協(xié)議,該協(xié)議定義了一些配置鍵盤的屬性。在程序或Interface Builder的查看器窗口中設置這些屬性就可以使系統(tǒng)顯示指定類型的鍵盤。
請注意:雖然UIWebView類并不直接支持UITextInputTraits協(xié)議,但您還是可以配置文本輸入元素的一些鍵盤屬性。特別值得一提的是,您可以在輸入元素的定義中包含autocorrect和autocapitalization屬性,通過這些屬性來指定鍵盤的行為,如下面的例子所示:
| <input type="text" size="30" autocorrect="off" autocapitalization="on"> |
?
管理鍵盤
接收鍵盤通告
當鍵盤被顯示或隱藏的時候,iPhone OS會向所有經(jīng)過注冊的觀察者對象發(fā)出如下通告:
-
UIKeyboardWillShowNotification
-
UIKeyboardDidShowNotification
-
UIKeyboardWillHideNotification
-
UIKeyboardDidHideNotification
當鍵盤首次出現(xiàn)或者消失,以及鍵盤的所有者或應用程序的方向發(fā)生變化的任何時候,系統(tǒng)都會發(fā)出鍵盤通告。
在上述的各種情況下,系統(tǒng)只發(fā)送與具體場景相關的的消息集合。舉例來說,如果鍵盤的所有者發(fā)生變化,系統(tǒng)只向當前的擁有者發(fā)送UIKeyboardWillHideNotification消息,但不發(fā)送UIKeyboardDidHideNotification消息,因為這個變化不會導致鍵盤最終被隱藏。UIKeyboardWillHideNotification消息只是簡單地通知鍵盤當前的所有者即將失去鍵盤焦點。而改變鍵盤的方向則會使系統(tǒng)發(fā)出上述的兩種消息,因為每個方向的鍵盤是不同的,在顯示新的鍵盤之前,必須先隱藏原來的鍵盤。
每個鍵盤通告都包含鍵盤在屏幕上的位置和尺寸。您應該使用通告中的信息來確定鍵盤的尺寸和位置,而不是假定鍵盤具有某個特定的尺寸或處于某個特定的位置。
圖5-5??在肖像模式和景觀模式下的相對鍵盤尺寸
請注意:info字典中的UIKeyboardBoundsUserInfoKey鍵包含的矩形只能用于取得尺寸信息,不要將該矩形的原點(它的值總是為{0.0, 0.0})用于矩形計算。由于鍵盤是以動畫的形式出現(xiàn)在它的位置上的,其實際的邊界尺寸會隨著時間的不同而不同,因此,info字典中有UIKeyboardCenterBeginUserInfoKey和UIKeyboardCenterEndUserInfoKey兩個鍵,用于保存鍵盤的起始和終止的位置,您可以根據(jù)這些位置計算出鍵盤的原點。
使用鍵盤通告的一個原因是為了重新定位被鍵盤遮掩的內(nèi)容。
顯示鍵盤
當用戶觸擊一個視圖時,系統(tǒng)就會自動將該視圖作為第一響應者。而當這種場景發(fā)生在包含可編輯文本的視圖時,該視圖就會啟動一個文本編輯會話。如果當前鍵盤不可見,該視圖會在編輯會話剛開始時請求系統(tǒng)顯示鍵盤。如果鍵盤已經(jīng)顯示在屏幕上了,第一響應者的改變會導致來自鍵盤的文本輸入被重定向到用戶剛剛觸擊的視圖上。
鍵盤是在視圖變?yōu)榈谝豁憫邥r自動被顯示的,因此,您通常不需要為了顯示它而做什么工作。但是,您可以通過調(diào)用視圖對象的becomeFirstResponder方法來為可編輯的文本視圖顯示鍵盤。調(diào)用這個方法可以使目標視圖成為第一響應者,并開始編輯過程,其效果和用戶觸擊該視圖是一樣的。
如果您的應用程序在一個屏幕上管理幾個基于文本的視圖,則需要跟蹤當前哪個視圖是第一響應者,以便在需要的時候取消鍵盤的顯示。
取消鍵盤
雖然鍵盤通常是自動顯示的,但它并不自動取消。相反,您的應用程序需要在恰當?shù)臅r機取消鍵盤。通常情況下,您在響應用戶動作的時候進行這樣的操作,比如當用戶觸擊鍵盤上的Return或Done按鍵、或者觸擊應用程序界面上的其它按鍵時。根據(jù)鍵盤配置的不同,您可能需要在用戶界面上加入額外的控件來取消鍵盤。
您可以調(diào)用作為當前第一響應者的文本視圖的resignFirstResponder方法來取消鍵盤。當文本視圖失去第一響應者的狀態(tài)時,就會結束其當前的編輯會話,將這個變化通知它的委托對象,并取消鍵盤。
移動鍵盤下面的內(nèi)容
需要做的調(diào)整通常包括暫時調(diào)整一或多個視圖的尺寸和位置,從而使文本對象可見。管理帶有鍵盤的文本對象的最簡單方法是將它們嵌入到一個UIScrollView(或其子類,如UITableView)對象。當鍵盤被顯示出來時,您需要做的只是調(diào)整滾動視圖的尺寸,并將目標文本對象滾動到合適的位置。為此,在UIKeyboardDidShowNotification通告的處理代碼中需要進行如下操作:
取得鍵盤的尺寸。
將滾動視圖的高度減去鍵盤的高度。
將目標文本框滾動到視圖中。
圖5-6演示了一個簡單的應用程序如何處理上述的幾個步驟。
該程序?qū)讉€文本輸入框嵌入到UIScrollView對象中,當鍵盤出現(xiàn)時,通告處理代碼首先調(diào)整滾動視圖的尺寸,然后用UIScrollView類的scrollRectToVisible:animated:方法將被觸擊的文本框滾動到視圖中。
圖5-6??調(diào)整內(nèi)容的位置,使其適應鍵盤
請注意:在配置滾動視圖時,請務必為所有的內(nèi)容視圖配置恰當?shù)淖詣映叽缯{(diào)整規(guī)則。在之前的圖中,文本框?qū)嶋H上是一個UIView對象的子視圖,該UIView對象又是UIScrollView對象的子視圖。如果該UIView對象的UIViewAutoresizingFlexibleWidth和UIViewAutoresizingFlexibleHeight選項被設置了,則改變滾動視圖的邊框尺寸會同時改變它的邊框,因而可能導致不可預料的結果。禁用這些選項可以確保該視圖保持尺寸不變,并正確滾動。描畫文本
除了顯示和編輯文本的UIKit類之外,iPhone OS還包含幾個直接在屏幕上描畫文本的方法。描畫簡單字符串的最簡單有效的方法是使用NSString類的UIKit擴展,該擴展包含一些在屏幕上描畫字符串的方法,并且可以描畫時使用多種屬性。還有一些方法,可以在真正描畫之前計算渲染字符串所需要的尺寸,這些方法有助于更加精確布局應用程序的內(nèi)容。
重要提示:由于性能上的考慮,您應該盡可能避免直接描畫文本。對于靜態(tài)文本,通過一或多個UILabel對象進行描畫比使用定制描畫例程要高效得多。類似地,UITextField類也支持不同的風格,這些風格使您更加易于將可編輯的文本區(qū)域集成到您的內(nèi)容中。
?
當您需要在界面上描畫定制文本字符串時,請使用NSString方法。UIKit包含一些對基本NSString類的擴展,用于在視圖中描畫字符串。這些方法使您可以精確調(diào)整文本的位置,以及將文本和視圖內(nèi)容進行融合;這個類的方法還可以根據(jù)指定的字體和風格屬性計算文本的包圍矩形。更多信息請參見NSString UIKit擴展參考。
如果您需要對描畫過程中用到的字體有更多的控制,還可以使用Core Graphics框架中的函數(shù)來進行描畫。Core Graphics框架提供的方法可以對字形和文本進行精確描畫和定位。有關這些函數(shù)及其用法的更多信息,請參見Quartz 2D編程指南和Core Graphics框架參考。
在Web視圖中顯示內(nèi)容
對于本地的內(nèi)容,您可以動態(tài)創(chuàng)建,也可以使用文件,然后調(diào)用loadData:MIMEType:textEncodingName:baseURL:或loadHTMLString:baseURL:方法;
如果要從網(wǎng)絡加載,則需要創(chuàng)建一個NSURLRequest對象,然后傳遞給web視圖對象的loadRequest:方法。
在發(fā)起一個基于網(wǎng)絡的請求后,如果由于某種原因必須釋放web視圖,則必須在釋放之前取消待處理的請求。為此,您可以調(diào)用web視圖的stopLoading方法。通常情況下,您可以在web視圖的視圖控制器的viewWillDisappear:方法中執(zhí)行這些代碼。如果需要確定一個請求是否處于等待狀態(tài),可以通過web視圖的loading屬性來判斷。
轉(zhuǎn)載于:https://www.cnblogs.com/Piosa/archive/2012/02/14/2350260.html
總結
以上是生活随笔為你收集整理的iPhone应用程序编程指南(文本和Web)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 欢迎访问我的新浪博客
- 下一篇: Direct2D (13) : 画刷之