2012-03-01 2 views
4

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

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

Обновление 2: Я нашел tut http://www.techotopia.com/index.php/Writing_iOS_4_Code_to_Hide_the_iPhone_Keyboard_%28Xcode_4%29, но он использует XIB-файл на XCode 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 { 
     // ... 
} 
+0

Как textField создается в IB. Связано ли это с ссылкой myTextField. Кроме того, myTtextField имеет один дополнительный символ «T» в нем. – Ravin

+0

Спасибо, я исправил T, но проблема сокрытия клавиатуры связана с ней. – user310291

ответ

3

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

+0

Спасибо, я попробовал, но это еще не работает другое предложение? :) – user310291

+0

Если у вас реализован метод textFieldShouldEndEditing: ', он должен вернуть YES. –

+0

Нет Я не реализовал textFieldShouldEndEditing – user310291

1

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

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

    [textField resignFirstResponder]; 
} 
+0

Спасибо, я тоже пробовал, но он по-прежнему не работает ни с другим предложением? :) – user310291

+1

Вы установили делегат текстового поля? – Aravindhan

+0

да, поскольку в моем коде есть myTextField.delegate = self; – user310291

1

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

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

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

+0

Правда, я удалил его (я последовал за тутом, который сказал, чтобы сделать это). Тем не менее это не так. – user310291

+0

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

+0

Я думаю, что 'textFieldShouldReturn' даже не называется. вы должны проверить свою ссылку 'UITextField' в раскадровке. – HelmiB

5

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

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

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

Смежные вопросы