版本記錄
版本號 | 時間 |
---|---|
V1.0 | 2018.09.01 |
前言
TextKit
框架是對Core Text
的封裝,用簡潔的調(diào)用方式實現(xiàn)了大部分Core Text
的功能惠啄。 TextKit是一個偏上層的開發(fā)框架,在iOS7
以上可用,使用它可以方便靈活處理復(fù)雜的文本布局瘟忱,滿足開發(fā)中對文本布局的各種復(fù)雜需求香缺。TextKit實際上是基于CoreText的一個上層框架手销,其是面向?qū)ο蟮摹=酉聛韼灼覀兙鸵黄鹂匆幌逻@個框架图张。感興趣的看下面幾篇文章锋拖。
1. TextKit框架詳細(xì)解析 (一) —— 基本概覽和應(yīng)用場景(一)
2. TextKit框架詳細(xì)解析 (二) —— 基本概覽和應(yīng)用場景(二)
3. TextKit框架詳細(xì)解析 (三) —— 一個簡單布局示例(一)
4. TextKit框架詳細(xì)解析 (四) —— 一個簡單布局示例(二)
5. TextKit框架詳細(xì)解析 (五) —— 文本編程指南之簡介(一)
6. TextKit框架詳細(xì)解析 (六) —— 文本編程指南之展示文本內(nèi)容(二)
7. TextKit框架詳細(xì)解析 (七) —— 文本編程指南之排版概念(三)
8. TextKit框架詳細(xì)解析 (八) —— 文本編程指南之管理Text Fields and Text Views(四)
9. TextKit框架詳細(xì)解析 (九) —— 文本編程指南之管理鍵盤(五)
10. TextKit框架詳細(xì)解析 (十) —— 文本編程指南之復(fù)制、剪切和粘貼操作(六)
Custom Views for Data Input - 輸入數(shù)據(jù)的自定義視圖
UIKit允許應(yīng)用程序替換系統(tǒng)鍵盤的自定義輸入視圖祸轮。 它還使應(yīng)用程序在系統(tǒng)鍵盤或自定義輸入視圖上方具有附件視圖兽埃。 此外,當(dāng)用戶點擊輸入視圖或輸入附件視圖的控件時适袜,它使應(yīng)用程序能夠播放按鍵點擊聲音柄错。
Input Views and Input Accessory Views - 輸入視圖和輸入附件視圖
UIKit框架包括對自定義輸入視圖和輸入附件視圖的支持。當(dāng)用戶在視圖中編輯文本或其他形式的數(shù)據(jù)時,您的應(yīng)用可以用自己的輸入視圖替換系統(tǒng)鍵盤售貌。例如给猾,應(yīng)用程序可以使用自定義輸入視圖從符文字母表中輸入字符。您還可以將輸入附件視圖附加到系統(tǒng)鍵盤或自定義輸入視圖颂跨;此附件視圖沿主輸入視圖的頂部運行敢伸,并且可以包含(例如)以某種方式影響文本的控件或顯示有關(guān)文本的某些信息的label。
要獲得此功能恒削,如果您的應(yīng)用程序使用UITextView
和UITextField
對象進行文本編輯池颈,只需將自定義視圖分配給inputView
和inputAccessoryView
屬性即可。當(dāng)文本對象成為第一響應(yīng)者時钓丰,將顯示這些自定義視圖饶辙。
您不僅限于框架提供的文本對象中的輸入視圖和輸入附件視圖。直接或間接從UIResponder
繼承的任何類(通常是自定義視圖)都可以指定自己的輸入視圖和輸入附件視圖斑粱。 UIResponder類為輸入視圖和輸入附件視圖聲明了兩個屬性:
@property (readonly, retain) UIView *inputView;
@property (readonly, retain) UIView *inputAccessoryView;
當(dāng)響應(yīng)者對象成為第一個響應(yīng)者并且inputView
(或inputAccessoryView
)不是nil
時弃揽,UIKit將輸入視圖設(shè)置為在父視圖下方的位置(或?qū)⑤斎敫郊晥D附加到輸入視圖的頂部)。第一個響應(yīng)者可以通過調(diào)用UIResponder
的reloadInputViews方法重新加載輸入和附件視圖则北。
UITextView
類將inputView和inputAccessoryView屬性重新聲明為readwrite
矿微。 UITextView對象的客戶端只需要獲取輸入和輸入附件視圖 - 通過加載nib文件或在代碼中創(chuàng)建視圖 - 并將它們分配給它們的屬性。自定義視圖類(以及從UIResponder繼承的其他子類)應(yīng)重新聲明這些屬性及其后備實例變量中的一個或兩個尚揣,并重寫屬性的getter方法 - 即涌矢,不合成屬性的訪問器方法。在他們的getter-method實現(xiàn)中快骗,他們應(yīng)該返回視圖娜庇,如果它還不存在則加載或創(chuàng)建它。
您可以在定義輸入視圖或輸入附件視圖的大小和內(nèi)容方面具有很大的靈活性方篮。雖然這些視圖的高度可以是您想要的名秀,但它們應(yīng)該與系統(tǒng)鍵盤的寬度相同。如果UIKit在其自動調(diào)整掩碼中遇到具有UIViewAutoresizingFlexibleHeight
值的輸入視圖藕溅,則會更改高度以匹配鍵盤匕得。輸入視圖和輸入附件視圖可能具有的子視圖(例如控件)的數(shù)量沒有限制。有關(guān)輸入視圖和輸入附件視圖的更多指導(dǎo)巾表,請參閱iOS Human Interface Guidelines
汁掠。
要在運行時加載nib文件,首先在Interface Builder
中創(chuàng)建輸入視圖或輸入附件視圖集币。然后在運行時獲取應(yīng)用程序的主包并調(diào)用loadNibNamed:owner:options:考阱,傳遞nib文件的名稱,nib文件的文件所有者以及任何選項鞠苟。此方法返回nib中頂級對象的數(shù)組乞榨,其中包括輸入視圖或輸入附件視圖秽之。將視圖分配給其對應(yīng)的屬性。有關(guān)此主題的更多信息姜凄,請參閱Resource Programming Guide中的Nib Files。
Listing 6-1
說明了一個自定義視圖類趾访,它在inputAccessoryView
的 getter方法中懶創(chuàng)建其輸入附件視圖态秧。
// Listing 6-1 Creating an input accessory view programmatically
- (UIView *)inputAccessoryView {
if (!inputAccessoryView) {
CGRect accessFrame = CGRectMake(0.0, 0.0, 768.0, 77.0);
inputAccessoryView = [[UIView alloc] initWithFrame:accessFrame];
inputAccessoryView.backgroundColor = [UIColor blueColor];
UIButton *compButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
compButton.frame = CGRectMake(313.0, 20.0, 158.0, 37.0);
[compButton setTitle: @"Word Completions" forState:UIControlStateNormal];
[compButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
[compButton addTarget:self action:@selector(completeCurrentWord:)
forControlEvents:UIControlEventTouchUpInside];
[inputAccessoryView addSubview:compButton];
}
return inputAccessoryView;
}
輸入視圖和輸入附件視圖的子視圖可以是您想要的任何內(nèi)容。 如果它們是按鈕或其他控件扼鞋,則需要為每個控件指定目標(biāo)和操作申鱼,并實現(xiàn)相關(guān)的操作方法以執(zhí)行數(shù)據(jù)輸入或操作。
正如它與系統(tǒng)鍵盤一樣云头,UIKit發(fā)布了UIKeyboardWillShowNotification捐友,UIKeyboardDidShowNotification,UIKeyboardWillHideNotification和UIKeyboardDidHideNotification通知溃槐。 觀察這些通知的對象可以獲得與輸入視圖和輸入附件視圖相關(guān)的幾何信息匣砖,并相應(yīng)地調(diào)整編輯的視圖。 有關(guān)示例和相關(guān)信息昏滴,請參閱Keyboards and Input Methods猴鲫。
Playing Input Clicks
當(dāng)用戶點擊自定義輸入視圖和鍵盤附件視圖時,您可以播放標(biāo)準(zhǔn)系統(tǒng)鍵盤點擊谣殊。 首先拂共,在輸入視圖中采用UIInputViewAudioFeedback
協(xié)議。 然后姻几,在響應(yīng)視圖中的鍵擊時調(diào)用playInputClick方法宜狐。
1. Adopting the UIInputViewAudioFeedback Protocol - 采取UIInputViewAudioFeedback協(xié)議
執(zhí)行以下三個步驟以采用UIInputViewAudioFeedback協(xié)議:
- 1)在Xcode項目中,創(chuàng)建
UIView
類的子類蛇捌。 在頭文件中抚恒,指示子類符合UIInputViewAudioFeedback
協(xié)議,如下所示:
@interface KeyboardAccessoryView:UIView <UIInputViewAudioFeedback> {
}
- 2)在UIView子類的實現(xiàn)文件中络拌,實現(xiàn)enableInputClicksWhenVisible方法柑爸,如下所示:
- (BOOL)enableInputClicksWhenVisible {
返回YES;
}
- 3)最后,在自定義輸入或附件視圖的
Interface Builder
文檔中盒音,選擇View對象表鳍。 在Identity
檢查器中,將對象的類設(shè)置為UIView子類祥诽。
2. Playing Input Clicks - 進行輸入播放點擊
要在自定義輸入或鍵盤附件視圖中點擊按鍵譬圣,請首先確保視圖采用UIInputViewAudioFeedback協(xié)議,如Adopting the UIInputViewAudioFeedback Protocol中所述雄坪。 然后厘熟,對于要為其提供單擊聲音的每個tap,請調(diào)用UIDevice
類的playInputClick方法,如下所示:
- (void)playClickForCustomKeyTap {
[[UIDevice currentDevice] playInputClick];
}
系統(tǒng)自動管理音頻會話以進行自定義輸入點擊绳姨,包括根據(jù)需要進行audio ducking
登澜。 (有關(guān)音頻會話的信息,請參閱Audio Session Programming Guide飘庄。)
后記
本篇主要講述了輸入數(shù)據(jù)的自定義視圖脑蠕,感興趣的給個贊或者關(guān)注~~~