亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

收起虛擬鍵盤的各種方法--IOS

2019-11-14 20:14:25
字體:
來源:轉載
供稿:網友

使用虛擬鍵盤來輸入資訊,是 iOS 的重要互動方式之一,虛擬鍵盤通常會自動出現在可以編輯的 UITextField 或是 UITextView 的編輯事件中,叫出鍵盤固然容易,但是要把它收起來,可就沒有這么簡單,之前在 UITextField 輸入結束后的收起小鍵盤的方式一文中,介紹了如何在編輯完成之后收起虛擬鍵盤,但是如果您的元件并沒有對應的事件可以讓你收起虛擬鍵盤,那又該如何做?下列我們以類似的元件 UITextView 為例,介紹一些通用的方法。

 

 1. 點擊編輯區以外的地方(UIView)

 這是一種很直覺的方法,當不再需要使用虛擬鍵盤時,只要點擊虛擬鍵盤和編輯區域外的地方,就可以將鍵盤收起,下面程式碼是在 UIView 中內建的觸碰事件方法函式,您可以參考 Touch Panel / 觸碰螢幕 / 壓力感應器的基本使用方式一文,找到更多關于觸碰事件的方法函式。

C代碼  收藏代碼
  1. - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {  
  2.     if (![myTextView isExclusiveTouch]) {  
  3.         [myTextView resignFirstResponder];  
  4.     }  
  5. }  

 

 如果要使用此方式請務必記得,你操作畫面的 Custom Class 一定要是 UIView 才行。

 

 畫面的 Custom Class 為 UIView

 

2. 點擊編輯區域以外的地方(UIControl)

 收起虛擬鍵盤的方式與前一種相同,但是如果你的觸碰事件里已經且寫滿了程式碼,那么就可以考慮使用,UIControl 的 Touch Up Inside 事件來收起鍵盤,方法是將以下程式碼與 UIControl 的 Touch Up Inside 事件連結即可。

C代碼  收藏代碼
  1. - (IBAction)dismissKeyboard:(id)sender {  
  2.     [myTextView resignFirstResponder];  
  3. }  

 

 如果要使用此方式請務必記得,你操作畫面的 Custom Class 一定要是 UIControl 才行。

 畫面的 Custom Class 為 UIControl

 將收起鍵盤的方法與 UIControl 事件連結 

 3. 使用制作收起鍵盤的按鈕

 當沒有編輯區域以外的地方可供點擊來收起鍵盤,自己制作一個按鈕來收起目前的虛擬鍵盤,也是一個不錯的方法,由于按鈕必須在虛擬鍵盤出現才能顯示于畫面上,因此必須借用 NSNotificationCenter 來幫助我們判斷目前鍵盤的狀態,您可以在類似 Observer Pattern 的 NSNotificationCenter 一文中,找到更多關于 NSNotificationCenter 的資訊。

  首先在 viewDidLoad: 事件中,向 NSNotificationCenter 進行註冊,告訴 NSNotificationCenter 我們的 doneButtonshow: 方法函式,想要訂閱有關 UIKeyboardDidShowNotification 的訊息事件。

C代碼  收藏代碼
  1. - (void)viewDidLoad {  
  2.    [super viewDidLoad];  
  3.   
  4.    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector (doneButtonshow:) name: UIKeyboardDidShowNotification object:nil];  
  5. }  

  現在每當虛擬鍵盤出現時,就會自動呼叫我們自定義的 doneButtonshow: 方法函式,接下來只要在該方法函式里定義按鈕出現的方法即可。

C代碼  收藏代碼
  1. -(void) doneButtonshow: (NSNotification *)notification {  
  2.    doneButton = [UIButton buttonWithType: UIButtonTypeRoundedRect];  
  3.    doneButton.frame = CGRectMake(0, 228, 70, 35);  
  4.    [doneButton setTitle:@"完成編輯" forState: UIControlStateNormal];  
  5.    [doneButton addTarget: self action:@selector(hideKeyboard) forControlEvents: UIControlEventTouchUpInside];  
  6.   
  7.    [self.view addSubview:doneButton];  
  8. }  

  最后是實作按鈕按下去時的 hideKeyboard: 方法函式,務必記得要在函式中移除該按鈕。

C代碼  收藏代碼
  1. -(void) hideKeyboard {  
  2.    [doneButton removeFromSuperview];  
  3.    [myTextView resignFirstResponder];  
  4. }  

 4. 使用判斷輸入字元

 如果要使用輸入特定字元(例如 return 換行字元)來收起鍵盤,必須先在類別內的 @interface 區段採用  協定,您可以參考 PRotocol 協定的使用方式一文,獲得更多關于協定的資訊。 

 在採用  協定之后,接著實作出協定內的 textView:shouldChangeTextInRange:replacementText:方法函式,此方法函式會在字元輸入時觸發,而回傳的 BOOL 值則代表該字元是否要作用,下列程式碼就是在此方法函式中,使用判斷輸入字元的方式來收起虛擬鍵盤(判斷字元為 return 換行字元)。

C代碼  收藏代碼
  1. - (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text {  
  2. if ([text isEqualToString:@"/n"]) {  
  3. [myTextView resignFirstResponder];  
  4. return NO;  
  5. }  
  6. return YES;  
  7. }  

  最后別忘記在 viewDidLoad: 事件中,將 UITextView 的代理物件指向自己,這樣程式才能正確找到實作  協定方法函式的類別。

C代碼  收藏代碼
  1. - (void)viewDidLoad  
  2. {  
  3. [super viewDidLoad];  
  4.   
  5. myTextView.delegate = self;  
  6. }  

 

5. 關于鍵盤遮蔽的問題

 如果您在實作上有遭遇到鍵盤遮蔽編輯區域的問題,可以參考使用 Animation 解決小鍵盤擋住 UITextField 的問題一文,透過 Core Graphic 的 Animation 功能,在鍵盤出現時同時移動編輯區域來解決遮蔽的問題。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲欧美色婷婷| 97久久伊人激情网| 97香蕉超级碰碰久久免费的优势| 精品国产视频在线| 欧美激情一级欧美精品| 国产精品福利在线| 欧美日韩在线看| 精品精品国产国产自在线| 2019精品视频| 日韩av男人的天堂| 亚洲新中文字幕| 亚洲电影免费观看高清完整版在线观看| 日韩免费观看高清| 亚洲精品在线不卡| 欧美性猛交xxxxx免费看| 国产精品27p| 岛国精品视频在线播放| 日韩久久免费电影| 日本久久亚洲电影| 欧美大片免费观看在线观看网站推荐| 亚洲人在线观看| 色与欲影视天天看综合网| 国产手机视频精品| 亚洲成人av片在线观看| 成人激情黄色网| 亚洲第一免费网站| 欧美久久精品午夜青青大伊人| 国产亚洲人成a一在线v站| 日韩免费看的电影电视剧大全| 在线观看亚洲视频| 久久久精品免费| 久久久久久久亚洲精品| 亚洲影视中文字幕| 中日韩午夜理伦电影免费| 亚洲天堂精品在线| 国产精品露脸自拍| 久久琪琪电影院| 国产精品久久久久久久久久三级| 精品日本高清在线播放| 亚洲精品中文字幕女同| 久久久视频精品| 久久精品国产视频| 少妇高潮 亚洲精品| 国产一区二区三区免费视频| 国产精品免费视频久久久| 亚洲国产精品久久精品怡红院| 国产欧美精品在线| 91sao在线观看国产| 成人h猎奇视频网站| 欧美日韩亚洲成人| 精品久久久一区二区| 亚洲国产成人精品久久久国产成人一区| 国产综合在线观看视频| 国产成人免费91av在线| 国产国语videosex另类| 国产在线精品成人一区二区三区| 国产亚洲精品久久久久久牛牛| 热久久这里只有精品| 久久久国产精彩视频美女艺术照福利| 亚洲黄页网在线观看| 欧美黑人性视频| 久久免费少妇高潮久久精品99| 在线看欧美日韩| 欧美在线视频一区二区| 久久伊人免费视频| 久久99久久亚洲国产| 亚洲福利视频在线| 7777精品久久久久久| 国产成人aa精品一区在线播放| 成人福利网站在线观看| 影音先锋日韩有码| 久久成年人免费电影| 国产主播在线一区| 日韩女在线观看| 国产欧美精品一区二区三区介绍| 日本精品视频在线观看| 欧美大片在线看免费观看| 国产精品444| 在线视频欧美性高潮| 人人做人人澡人人爽欧美| 国产剧情久久久久久| 91免费精品国偷自产在线| 久久天天躁狠狠躁老女人| 亚洲人成电影网站色| 91精品国产成人www| 日韩精品视频在线免费观看| 97国产精品视频| 欧美视频专区一二在线观看| 国产99视频精品免视看7| 欧美成人中文字幕在线| 欧美国产日韩一区二区三区| 久久精品久久久久| 91在线观看免费观看| 亚洲一级黄色av| 国产成人在线视频| 欧美视频第一页| 亚洲精品少妇网址| 国产精品永久在线| 亚洲激情视频在线| 欧美日韩视频免费播放| 欧美中文在线视频| 色偷偷91综合久久噜噜| www.亚洲一二| 中文字幕精品—区二区| 欧美激情图片区| 欧美肥婆姓交大片| 97人人模人人爽人人喊中文字| 中文字幕日韩在线视频| 欧美精品一区三区| 国产成人在线一区| 欧美贵妇videos办公室| 都市激情亚洲色图| 国产精品白丝av嫩草影院| 丁香五六月婷婷久久激情| 91日本在线视频| 日韩欧美国产中文字幕| 亚洲激情 国产| 18一19gay欧美视频网站| 亚洲最大的av网站| 成人激情视频在线观看| 91久久精品美女| 久久av在线看| 69久久夜色精品国产69| 欧美性受xxx| 18性欧美xxxⅹ性满足| 91在线|亚洲| 国产午夜精品视频| 91精品国产综合久久香蕉最新版| 欧亚精品中文字幕| 国语自产精品视频在免费| 国产经典一区二区| 亚洲国产精品99久久| 成人午夜一级二级三级| 欧美日韩免费观看中文| 97超级碰碰碰久久久| 亚洲国产精品久久91精品| 亚洲精品资源在线| 久久久电影免费观看完整版| 亚洲国产婷婷香蕉久久久久久| 亚洲一区av在线播放| 精品国产一区二区三区久久久狼| 亚洲www在线| 日韩午夜在线视频| 欧美午夜视频一区二区| 亚洲精品国产精品自产a区红杏吧| 91精品视频网站| 69久久夜色精品国产69乱青草| 亚洲欧美另类自拍| 国产欧美精品一区二区三区-老狼| 欧美精品一区二区三区国产精品| 青青草成人在线| 97国产suv精品一区二区62| 久久97精品久久久久久久不卡| 色综合色综合网色综合| 亚洲深夜福利视频| 57pao国产成人免费| 亚洲国产精品国自产拍av秋霞| 91精品国产高清久久久久久| 欧美最猛性xxxxx亚洲精品| 538国产精品视频一区二区| 亚洲xxxx做受欧美| 精品亚洲一区二区三区在线观看| 精品国产视频在线| 欧美www在线|