我的情况如下:我有一个应用程序,其中实现了PIN屏幕。它没有什么高科技的基本4 UITextField
和通过UITextFieldDelegate
实现的逻辑 - 它的工作原理。
我在-(void)applicationWillEnterForeground:(UIApplication *)application
事件的app委托中显示此屏幕。我使用来自github的MMDrawerController
(链接:https://github.com/mutualmobile/MMDrawerController)作为主视图控制器。如果当应用程序再次进入后台和前景时显示的当前视图为MMDrawerController
,那么becomeFirstResponder
无法正常工作 - 它不会显示键盘。如果在抽屉控制器顶部有另一个视图控制器,则在进入前景时(比如设置视图),键盘会正常显示。
我已尝试NSLog
canBecomeFirstResponder
属性及其设置为YES
。到底是怎么回事?如何解决这个问题?
我可以根据需要粘贴代码,但没有任何歧义。只需简单地致电becomeFirstResponder
。
修改
更清楚地解释一下事情。 rootViewController
是视图控制器caleed LoginViewController
并且alloc-init
是侧边栏和中心视图控制器,alloc-init
是抽屉控制器并挂钩所有内容以使其正常工作。应用程序委托视图实际上是一个PIN屏幕,当应用程序进入前台时会弹出该屏幕。现在键盘看起来应该是第一次看到抽屉。
当用户弹出SettingsViewController
时(是的,这是另一个可从侧边栏视图控制器访问的视图控制器),它也能正常工作。但是当用户解除设置时,控制器键盘不再出现。它必须与抽屉做一些事情因为我尝试没有它并且它工作(但我只有侧边栏或中心视图控制器可见)。
答案 0 :(得分:0)
理想情况下,您需要访问MMDrawerControllers currentView中的textField。我已经实现了类似的实现:
在您的app appate中存储对DrawerController的引用,如下所示:
在AppDels界面中:
@property(nonatomic, strong) MMDrawerController *appDrawController;
然后在didFinishLaunching中创建本地抽屉控制器后(如果您按照此库的设置说明操作):
self.appDrawController = drawerController;
在你的applicationWillEnterForeground中:
THECLASSTHATCONTAINSTHEPINVIEW *yourClass = self.appDrawController.centerViewController.childViewControllers[0];
现在您可以访问公共方法/属性,所以:
[[yourClass pinEntryField] becomeFirstResponder];
这有帮助吗?