как я могу отклонить клавиатуру при нажатии клавиши Enter - PullRequest
2 голосов
/ 21 февраля 2012

Я хочу отклонить свою клавиатуру, когда я нажимаю клавишу RETURN.

Я попытался, поместив кнопку в вид сбоку.

Но как я могу это сделать, нажав клавишу RETURN?

Ответы [ 4 ]

7 голосов
/ 21 февраля 2012
-(BOOL)textFieldShouldReturn:(UITextField *)textField {
    [textField resignFirstResponder];
    return YES;
}

Не забудьте добавить делегата UITextFieldDelegate

2 голосов
/ 21 февраля 2012

Я предполагаю, что вы говорите о UITextField, а не UITextView, поскольку ваш вопрос не так ясен?Если это так, убедитесь, что ваш класс помечен как UITextFieldDelegate в файле интерфейса,

@interface MyController: UIViewController <UITextFieldDelegate> {
   UITextField *activeTextField;

   // ...remainder of code not show ...
}

, а затем вам следует реализовать два метода делегата, как показано ниже:

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
    activeTextField = textField;!    
    return YES;
}

- (BOOL)textFieldShouldReturn:(UITextField *)textField {
    activeTextField = nil; 
    [textField resignFirstResponder];
    return YES;
}

Однако есливы используете UITextView тогда все немного сложнее.Протокол UITextViewDelegate не имеет эквивалента методу textFieldShouldReturn:, предположительно, поскольку мы не должны ожидать, что клавиша Return будет сигналом того, что пользователь хочет прекратить редактирование текста в многострочном диалоговом окне ввода текста (в конце концов,пользователь может захотеть вставить разрывы строк, нажав клавишу Return).

Однако существует несколько способов, с помощью которых UITextView может отказаться от должности первого респондента с помощью клавиатуры.Обычный метод - поместить кнопку Готово на панель навигации, когда на UITextView отображается всплывающая клавиатура.При нажатии эта кнопка просит текстовое представление подать в качестве первого респондента, который затем отклонит клавиатуру.

Однако, в зависимости от того, как вы спланировали свой интерфейс, вы можете захотеть, чтобы UITextView ушел в отставку.когда пользователь нажимает за пределы UITextView.Чтобы сделать это, вы должны создать подкласс UIView для принятия касаний, а затем дать указание текстовому представлению уйти в отставку, когда пользователь нажимает за пределы самого представления.

Создайте новый класс,

#import <UIKit/UIKit.h>

@interface CustomView : UIView {
   IBOutlet UITextView *textView;
}

@end

Затем в реализации реализуйте метод touchesEnded:withEvent: и попросите UITextView подать в отставку в качестве первого респондента.

#import "CustomView.h"

@implementation CustomView

- (id)initWithFrame:(CGRect)frame {
    if (self = [super initWithFrame:frame]) {
        // Initialization code
    }
    return self;
}

- (void) awakeFromNib {
    self.multipleTouchEnabled = YES;
}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
    NSLog(@"touches began count %d, %@", [touches count], touches);

    [textView resignFirstResponder];
    [self.nextResponder touchesEnded:touches withEvent:event];
}

@end

После того, как вы добавили класс, вам нужно сохранить все ваши изменения, затем перейти в Interface Builder и щелкнуть на своем представлении.Откройте инспектор удостоверений в Utility pabel и измените тип представления в файле nib на ваш CustomView, а не на класс UIView по умолчанию.Затем в инспекторе соединений перетащите выход textView в UITextView.После этого и после перестройки приложения прикосновения к активным элементам пользовательского интерфейса теперь будут отклонять клавиатуру.Однако обратите внимание, что если UIView, который вы создаете, является «позади» других элементов пользовательского интерфейса, эти элементы будут перехватывать касания, прежде чем они достигнут уровня UIView.Таким образом, хотя это решение элегантно, оно может использоваться только в некоторых ситуациях.Во многих случаях вам придется прибегнуть к методу грубой силы, добавив кнопку Готово к панели навигации, чтобы закрыть клавиатуру.

2 голосов
/ 21 февраля 2012

Я надеюсь, что вы сделали UIViewController <UITextFieldDelegate> и yourTextField.delegate=self;

, а затем в методе делегата

- (BOOL)textFieldShouldReturn:(UITextField *)textField;
{

   [textField resignFirstResponder];
   return YES;

}
1 голос
/ 21 февраля 2012

Убедитесь, что ваш класс контроллера представления является делегатом для вашего UITextField, а затем используйте метод делегата в этом классе:

#pragma mark - Delegate Methods
- (BOOL)textFieldShouldReturn:(UITextField *)textField{
    // Dismiss the keyboard when the Return key is pressed.
    [textField resignFirstResponder];

    return YES;
}
...