Показать клавиатуру с контроллером представления контейнера - PullRequest
0 голосов
/ 08 октября 2018

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

...