Мне нужно показать клавиатуру в 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 к представлению.Я знаю, что это сработает, но это взлом, и я бы предпочел этого не делать.