Показать клавиатуру с контроллером представления контейнера
Мне нужно показать клавиатуру в UIViewController
без использования текстового поля. Я достигаю этого путем реализации UIKeyInput
протокол, который работает хорошо.
Я переместил UIViewController
в контроллер представления контейнера, поэтому у меня по сути есть UIViewController
встроен в UIViewController
, Это довольно стандартный шаблон для достижения того, чего я пытаюсь достичь. Тем не менее, теперь, когда у меня есть эта функция контроллера представления контейнера, UIKeyInput
больше не отправляет уведомления UIViewController
, он отправляет их родительскому контроллеру (контейнеру), что не идеально.
Кто-нибудь знает, как я могу получить UIKeyInput
протокол для работы внутри моего дочернего контроллера вида?
Ниже показано, как добавить дочерний контроллер представления в контейнер.
[self willMoveToParentViewController:nil];
[self.currentChildViewController removeFromParentViewController];
self.currentChildViewController = viewController;
viewController.view.frame = CGRectMake(0, 0, CGRectGetWidth(self.view.frame), CGRectGetHeight(self.view.frame));
[self addChildViewController:viewController];
[self.view addSubview:viewController.view];
[viewController didMoveToParentViewController:self];
Вот моя реализация протокола:
@interface ChildViewController : UIViewController <UIKeyInput, UITextInputTraits>
Если реализовано в дочернем контроллере представления, эти функции никогда не будут вызваны. Они вызываются, если протокол реализован в родительском (контейнерном) контроллере представления.
- (void)insertText:(NSString *)text
- (void)deleteBackward
Я также отмечу, что я стараюсь избегать решений, которые заставляют меня добавлять скрытое UITextField к представлению. Я знаю, что это сработает, но это взлом, и я бы не стал этого делать.