在IB的庫中,引言告訴咱們,當按下返回鍵時, UITextView
的鍵盤將消失。 可是實際上, 返回鍵只能充當'\\ n'。 網絡
我能夠添加一個按鈕,而後使用[txtView resignFirstResponder]
隱藏鍵盤。 框架
可是有沒有一種方法能夠在鍵盤中爲返回鍵添加動做,這樣我就不須要添加UIButton
? ide
-(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text { if([text isEqualToString:@"\n"]) [textView resignFirstResponder]; return YES; } yourtextView.delegate=self;
同時添加UITextViewDelegate
ui
不要忘記確認協議 spa
若是您沒有添加if([text isEqualToString:@"\\n"])
,則沒法進行編輯 code
在viewDidLoad中添加觀察者 server
[[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(textViewKeyPressed:) name: UITextViewTextDidChangeNotification object: nil];
而後使用選擇器檢查「 \\ n」 事件
-(void) textViewKeyPressed: (NSNotification*) notification { if ([[[notification object] text] hasSuffix:@"\n"]) { [[notification object] resignFirstResponder]; } }
它確實使用「 \\ n」,而不是專門檢查返回鍵,可是我認爲這是能夠的。 rem
更新 get
請參閱下面的ribto答案,該答案使用[NSCharacterSet newlineCharacterSet]
代替\\n
一種更優雅的方法是,當用戶點擊鍵盤框架以外的某個位置時,將其關閉。
首先,在UIBuilder的身份檢查器中將ViewController的視圖設置爲「 UIControl」類。 按住Control鍵將視圖拖到ViewController的頭文件中,並將其做爲操做與事件(如Touch Up Inside)連接起來,例如:
ViewController.h
-(IBAction)dismissKeyboardOnTap:(id)sender;
在主ViewController文件中,ViewController.m:
-(IBAction)dismissKeyboardOnTap:(id)sender { [[self view] endEditing:YES]; }
您可能須要使用相似技術雙擊或長按。 您可能須要將ViewController設置爲UITextViewDelegate並將TextView鏈接到ViewController。 此方法適用於UITextView和UITextField。
資料來源:大書呆子牧場
編輯:我還要補充一點,若是您使用的是UIScrollView,則上述技術可能沒法經過Interface Builder輕鬆地工做。 在這種狀況下,您可使用UIGestureRecognizer並在其中調用[[self view] endEditing:YES]方法。 一個例子是:
-(void)ViewDidLoad{ .... UITapGestureRecognizer *tapRec = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tap:)]; [self.view addGestureRecognizer: tapRec]; .... } -(void)tap:(UITapGestureRecognizer *)tapRec{ [[self view] endEditing: YES]; }
當用戶在鍵盤上輕擊而未輕按輸入空格時,鍵盤將關閉。
我知道這不是這個問題的確切答案,可是在互聯網上尋找答案後,我發現了這個話題。 我認爲其餘人也有這種感受。
這是我發現的UITapGestureRecognizer的差別,我發現它可靠且易於使用-只需將TextView的委託設置爲ViewController。
當TextView變爲可編輯狀態時,我添加了UITapGestureRecognizer而不是ViewDidLoad:
-(void)textViewDidBeginEditing:(UITextView *)textView{ _tapRec = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tap:)]; [self.view addGestureRecognizer: _tapRec]; NSLog(@"TextView Did begin"); }
當我在TextView外部點擊時,視圖將結束編輯模式,而且UITapGestureRecognizer會自行刪除,所以我能夠繼續與視圖中的其餘控件進行交互。
-(void)tap:(UITapGestureRecognizer *)tapRec{ [[self view] endEditing: YES]; [self.view removeGestureRecognizer:tapRec]; NSLog(@"Tap recognized, tapRec getting removed"); }
我但願這有幫助。 看起來如此明顯,但我從未在網絡上的任何地方看到此解決方案-我作錯了什麼嗎?
個人hack:
1-建立一個覆蓋整個視圖的按鈕; 2-將其發送到視圖的背景,3-在屬性檢查器中將其類型從「圓角矩形」更改成「自定義」,4-建立操做5,實施操做方法:
- (IBAction)bgTouched:(id)sender { //to dismiss keyboard on bg btn pressed [_userInput resignFirstResponder]; }
_userInput是您的TextField出口