UITextView скрыть клавиатуру в iphone - PullRequest
9 голосов
/ 13 июля 2011

Я хочу скрыть клавиатуру, когда пользователь нажимает кнопку возврата в UITextView объект в iphone.Однако, как ни странно, это не работает для UITextView, но работает для UITextField.Я не могу понять, почему ...

Это то, что я сделал:

1) Я создал приложение на основе представления в XCode4.

2) в .xibсозданные UITextView, UITextField и UIButton объекты

3) Помечены как UITextField, так и UITextView делегаты Владельцу файла в Outlets

4) Добавлен <UITextFieldDelegate> в @interface UIViewController в .h

5) Добавлена ​​функция textFieldShouldReturn в .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)

В качестве дополнительной проверки я сделал кнопку для вызова функции doSomething

- (IBAction)doSomething:(id)sender {
    [textBoxLarge resignFirstResponder];
    [textBoxLittle resignFirstResponder];
}

Когда я нажимаю кнопку, клавиатура исчезает в обоих текстовых полях.

Это сводит меня с ума, почему textFieldShouldReturn работает для небольшого текстового поля, но НЕ для большого текстового поля.

Пожалуйста, помогите!

Ответы [ 7 ]

20 голосов
/ 12 апреля 2012

Три вещи:

Сделайте так, чтобы ваш вид реализовал 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в конструкторе интерфейсов.

(Кстати: решение скопировано из комментариев к предыдущему ответу, поскольку мне потребовалось некоторое время, чтобы извлечь его. Хотя другие могут извлечь пользу из моего опыта.)

7 голосов
/ 13 июля 2011

Вам нужно написать код в UITextViewDelegate и назначить его вашему классу.

5 голосов
/ 12 апреля 2012

Простой трюк Установите delegate для просмотра текста, а затем действие

doSomething 
{

}

подключитесь к просмотру ext для control event didEndOnExit and tuchupinside


// Отключить клавиатуру, когда пользовательнажимает ввод / возврат

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text 
{
    if([text isEqualToString:@"\n"]) 
    {
        [textView resignFirstResponder];
        return NO;
    }
    return YES;
}
0 голосов
/ 01 апреля 2016

Если вы пришли сюда в поисках решения Swift, как я, вот вам:)

extension keyboardDisappearViewController : UITextViewDelegate {
func textView(textView: UITextView, shouldChangeTextInRange range: NSRange, replacementText text: String) -> Bool {
    if(text == "\n") {
        textView.resignFirstResponder()
    }
    return true
}}
0 голосов
/ 14 января 2016

Ключевые моменты

  • Кто-то должен прислушиваться к клавише возврата, нажав

    • UITextFieldDelegate
    • textFieldShouldReturn (textField: UITextField)
  • Кто-то должен вручную убрать клавиатуру

    • resignFirstResponder ()

# 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'
} 
0 голосов
/ 08 июля 2013

Используйте этот код

Унаследуйте протокол UITextViewDelegate в вашем Viewcontroller и добавьте текст

@interface YourViewController () <UITextViewDelegate>

В viewDidLoad установите себя в качестве делегата:

yourUITextView.delegate = self;

Реализация делегатаМетод ниже:

- (BOOL)textViewShouldBeginEditing:(UITextView *)textView
{ 
   return NO; 
}
0 голосов
/ 02 июня 2012

Вы закодировали в файле .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
...