我需要在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添加到视图的解决方案。我知道这行得通,但这是一个hack,我宁愿不这样做。