Кнопка «отклонить клавиатуру» на iPad не отклоняет клавиатуру - PullRequest
0 голосов
/ 04 мая 2011

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

Ответы [ 3 ]

2 голосов
/ 02 октября 2011

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

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

@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 голосов
/ 03 июня 2011

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

- (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 голосов
/ 28 мая 2011

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

[UITextField resignFirstRepsonder];
...