textFieldShouldReturn не работает (с использованием раскадровки в XCode 4) - PullRequest
4 голосов
/ 01 марта 2012

У меня есть кнопка и текстовое поле.Я просто хочу, чтобы клавиатура исчезала при нажатии на кнопку.Почему мой код ниже не работает.

Обновление: я видел что-то о владельце файла.Я не понимаю, как это сделать в XCode4. Я использую раскадровку и не вижу значка владельца файла.

Обновление 2: Я нашел пачку http://www.techotopia.com/index.php/Writing_iOS_4_Code_to_Hide_the_iPhone_Keyboard_%28Xcode_4%29, но он использует файл XIBXCode 4 не раскадровка.Как это сделать с раскадровкой?

myViewController.h

@interface myViewController : UIViewController <UITextFieldDelegate>
{
    UITextField *myTextField;
}

@property (retain, nonatomic) IBOutlet UITextField *myTextField;

myViewController.m

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

- (void)viewDidLoad
{
    [super viewDidLoad];
    myTextField.delegate = self;
}

- (IBAction)DoCalc:(id)sender {
      // ...
}

Ответы [ 4 ]

5 голосов
/ 22 мая 2013

Проверьте, не вызывается ли функция textFieldShouldReturn, которую вы написали в myViewController.m. Установите точку останова внутри него и запустите симулятор. Нажмите клавишу возврата на клавиатуре. Если программа не ломается, то написанная вами функция не вызывается.

Если это так, то это потому, что вы не делегировали обязанности UIResponder вашему контроллеру представления. Убедитесь, что вы делегируете обязанности респондента вашему классу myViewController для UITextField, с которым вы работаете.

В раскадровке вы делаете это путем перетаскивания элемента управления из виджета UITextField на желтый шар под сценой и выбора «делегировать» в появившемся контекстном меню.

3 голосов
/ 01 марта 2012

textFieldShouldReturn: должен вернуть NO, чтобы скрыть клавиатуру. Еще одна вещь - не устанавливайте первого респондента на self, достаточно [textField resignFirstResponder], iOS должна показывать nextResponder сама по себе.

1 голос
/ 01 марта 2012

Удалить [self becomeFirstResponder]; следует сделать это.

resignFirstResponder - отклонение клавиатуры. пока becomeFirstResponder - открыть клавиатуру. поэтому в вашем коде вы закрываете, а затем снова открываете клавиатуру. Последнее действие - это открытие клавиатуры, следовательно, оно не закроется.

вы можете посмотреть UIResponder Class как суперкласс UITextField

1 голос
/ 01 марта 2012

В этом методе вы можете скрыть клавиатуру ...

- (void)textFieldDidEndEditing:(UITextField *)textField {

     [textField resignFirstResponder];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...