成为第一响应者应用代表不工作

时间:2013-09-04 14:00:49

标签: ios objective-c uiview uitextfield appdelegate

我的情况如下:我有一个应用程序,其中实现了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时(是的,这是另一个可从侧边栏视图控制器访问的视图控制器),它也能正常工作。但是当用户解除设置时,控制器键盘不再出现。它必须与抽屉做一些事情因为我尝试没有它并且它工作(但我只有侧边栏或中心视图控制器可见)。

1 个答案:

答案 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];

这有帮助吗?