2011-05-04 2 views
0

У меня есть UITextField в пейзажном представлении, и когда я нажимаю кнопку «увольнять клавиатуру» в правом нижнем углу экрана UIKeyboard, клавиатура НЕ исчезает. Есть ли способ программно слушать, когда был нажат этот ключ? Или есть связь, которую я не вижу, что заставит эту клавиатуру уйти? Это iOS 4 и XCode 4. Спасибо.Кнопка «отклонить клавиатуру» iPad не отменяет клавиатуру

ответ

2

У меня была такая же проблема сегодня, и я подумал, что это работает в примере кода Apple KeyboardAccessory. Так что я сделал обратную инженерию. ViewController не была ошибкой, которую я сделал в моем случае.

В реализации UIApplicationDelegate есть точка входа приложения, где будет установлен корневой контроллер и окно - (void) applicationDidFinishLaunching:(UIApplication *)application. Если вы забыли добавить представление root viewcontrollers в окно как subview, кнопка «закрыть-клавиатура» не будет работать в любом представлении вашего приложения.

@class ViewController; 

@interface KeyboardAccessoryAppDelegate : NSObject <UIApplicationDelegate> { 
    UIWindow *window; 
    ViewController *viewController; 
} 

    @property (nonatomic, retain) IBOutlet UIWindow *window; 
    @property (nonatomic, retain) IBOutlet ViewController *viewController; 

@end 

...

- (void)applicationDidFinishLaunching:(UIApplication *)application {  

    [window addSubview:viewController.view]; 
    [window makeKeyAndVisible]; 
} 

Пожалуйста, не забудьте настроить выходы в главном файле XIb.

Я не знаю, почему это связано с поведением клавиатуры. Но моя теория заключается в том, что цепочка ответчиков не связана с окном, но это необходимо.

0

вам нужно указать текстовое поле, которое принимает ввод на клавиатуре, чтобы больше не быть первым ответчиком.

[UITextField resignFirstRepsonder]; 
+0

Да - это не проблема. Когда это сообщение отправляется, клавиатура исчезает. Проблема в том, что ничего не происходит, когда нажата кнопка «убрать клавиатуру» в правом нижнем углу iPad-клавиатуры (которая похожа на маленькую иконку клавиатуры). И текстовое поле не получает никакого ввода от этого ключа. Мне действительно интересно, если я столкнулся с ошибкой в ​​этот момент. Спасибо хоть. –

0

Чтобы закрыть клавиатуру с помощью кнопки распускать клавиатуры вам необходимо реализовать метод делегата

- (BOOL)textFieldShouldReturn:(UITextField *)textField 
{ 
    //Check if your text field is first responder, and if it is, have it resign 
} 

В качестве альтернативы, если вы хотите, чтобы закрыть клавиатуру, нажав вне его, используйте

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    for (UIView* view in self.view.subviews) 
    { 
     if ([view isKindOfClass:[UITextField class]]) { 
      [view resignFirstResponder]; 
     } 

     if ([view isKindOfClass:[UITextView class]]) { 
      [view resignFirstResponder]; 
     } 
    } 
} 
+0

Спасибо @capt kettch - У меня уже было это в моем коде ... вот фрагмент ... У меня есть класс, настроенный как делегат для UITextField: '@interface SettingsController: UIViewController {... 'then в методе, который вы упомянули, я проверяю с помощью:' - (BOOL) textFieldShouldReturn: (UITextField *) textField { if ([textField isFirstResponder]) { [textField resignFirstResponder]; } 'so - Я думаю, что все правильно связано - ничего похожего не хватает? Еще раз спасибо! –

+0

Я забыл упомянуть, вы должны убедиться, что ваше текстовое поле имеет свой делегат, установленный в viewcontroller (скорее всего, я) –

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