![](/img/trans.png)
[英]How to hide keyboard once UITextView becomes the first responder in iPhone SDK?
[英]UITextView hide keyboard in iphone
當用戶在 iphone 的UITextView
object 中按下返回時,我想隱藏鍵盤。 然而,神秘的是,這不適用於UITextView
但適用於UITextField
。 我無法弄清楚為什么......
這就是我所做的:
1) 我在 XCode4 中創建了一個基於視圖的應用程序。
2) in.xib 創建了UITextView
、 UITextField
和UIButton
對象
3) 將UITextField
和UITextView
都標記為 Outlets 中的文件所有者
4) 將<UITextFieldDelegate>
添加到@interface UIViewController in.h
5) 新增textFieldShouldReturn
function in.m
以下是代碼:
.h 文件
@interface keyboardDisappearViewController : UIViewController <UITextFieldDelegate>
{
UITextView *textBoxLarge;
UITextField *textBoxLittle;
}
@property (nonatomic, retain) IBOutlet UITextView *textBoxLarge;
@property (nonatomic, retain) IBOutlet UITextField *textBoxLittle;
- (IBAction)doSomething:(id)sender;
@end
.m 文件
- (BOOL) textFieldShouldReturn:(UITextField *)theTextField
{
NSLog(@"textFieldShouldReturn Fired :)");
[textBoxLarge resignFirstResponder];
[textBoxLittle resignFirstResponder];
return YES;
}
令人驚訝的是,在 textBoxLittle (UITextField) 的情況下鍵盤正在消失,但在 textBoxLarge(UITextView) 的情況下則不會
作為進一步檢查,我制作了調用 function doSomething 的按鈕
- (IBAction)doSomething:(id)sender {
[textBoxLarge resignFirstResponder];
[textBoxLittle resignFirstResponder];
}
當我按下按鈕時,兩個文本框中的鍵盤都消失了。
為什么 textFieldShouldReturn 適用於小文本框,但不適用於大文本框,這讓我發瘋了。
請幫忙!
三件事:
讓你的視圖實現 UITextViewDelegate。
@interface keyboardDisappearViewController : UIViewController
<UITextFieldDelegate, UITextViewDelegate>
添加以下方法:
- (BOOL)textView:(UITextView *)textView
shouldChangeTextInRange:(NSRange)range
replacementText:(NSString *)text
{
if ([text isEqualToString:@"\n"])
{
[textView resignFirstResponder];
}
return YES;
}
將文件的所有者設置為界面構建器中 UITextView 的委托。
(順便說一句:解決方案從評論復制到上一個答案,因為我花了一段時間才提取出來。我雖然其他人可以從我的經驗中受益。)
您需要在UITextViewDelegate
中編寫代碼並將其分配給您的 class。
簡單的技巧為您的文本視圖設置delegate
,然后
doSomething
{
}
操作連接到control event didEndOnExit and tuchupinside
的 ext 視圖
// 當用戶點擊進入/返回時關閉鍵盤
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
if([text isEqualToString:@"\n"])
{
[textView resignFirstResponder];
return NO;
}
return YES;
}
使用此代碼
在 Viewcontroller 中繼承 UITextViewDelegate 協議添加文本
@interface YourViewController () <UITextViewDelegate>
在 viewDidLoad 中將自己設置為委托:
yourUITextView.delegate = self;
實現下面的委托方法:
- (BOOL)textViewShouldBeginEditing:(UITextView *)textView
{
return NO;
}
關鍵點
有人需要在聽返回鍵按下
有人需要手動關閉鍵盤
#1:創建一個 UITextFieldDelegate 並將其作為代表分配給您的 UITextField -
exampleTextField.delegate = yourUITextFieldDelegate;
#2:讓 'yourUITextFieldDelegate' 包含以下內容 -
func textFieldShouldReturn(textField : UITextField) -> Bool {
self.titleField.resignFirstResponder(); //Here's the key!!!!!
return true; //true just says 'default behavior'
}
如果您像我一樣來這里尋找 Swift 解決方案,那么您就是:)
extension keyboardDisappearViewController : UITextViewDelegate {
func textView(textView: UITextView, shouldChangeTextInRange range: NSRange, replacementText text: String) -> Bool {
if(text == "\n") {
textView.resignFirstResponder()
}
return true
}}
您已在 .h 文件中編碼:
@interface keyboardDisappearViewController : UIViewController <UITextFieldDelegate>
{
UITextView *textBoxLarge;
UITextField *textBoxLittle;
}
@property (nonatomic, retain) IBOutlet UITextView *textBoxLarge;
@property (nonatomic, retain) IBOutlet UITextField *textBoxLittle;
- (IBAction)doSomething:(id)sender;
@end
它應該是:
@interface keyboardDisappearViewController : UIViewController <UITextFieldDelegate>
{
UITextView *textBoxLarge;
UITextField *textBoxLittle;
}
@property (nonatomic, retain) IBOutlet UITextField *textBoxLarge;
@property (nonatomic, retain) IBOutlet UITextField *textBoxLittle;
- (IBAction)doSomething:(id)sender;
@end
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.