簡體   English   中英

UITextView在iphone中隱藏鍵盤

[英]UITextView hide keyboard in iphone

當用戶在 iphone 的UITextView object 中按下返回時,我想隱藏鍵盤。 然而,神秘的是,這不適用於UITextView但適用於UITextField 我無法弄清楚為什么......

這就是我所做的:

1) 我在 XCode4 中創建了一個基於視圖的應用程序。

2) in.xib 創建了UITextViewUITextFieldUIButton對象

3) 將UITextFieldUITextView都標記為 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; 
}

關鍵點

  • 有人需要在聽返回鍵按下

    • UITextFieldDelegate
    • textFieldShouldReturn(textField: UITextField)
  • 有人需要手動關閉鍵盤

    • 辭職第一響應者()

#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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM