我遇到一个间歇性的问题,键盘不会显示在UITextField上。
大多数时候都会发生,但不是每次都发生。
我真的无法确定导致它的动作。
我已订阅UIKeyboardDidShowNotification
,其中的通知用户数据为:
0x15581730 {name = UIKeyboardDidShowNotification; userInfo = {
UIKeyboardAnimationCurveUserInfoKey = 0;
UIKeyboardAnimationDurationUserInfoKey = "0.25";
UIKeyboardBoundsUserInfoKey = "NSRect: {{0, 0}, {320, 0}}";
UIKeyboardCenterBeginUserInfoKey = "NSPoint: {160, 568}";
UIKeyboardCenterEndUserInfoKey = "NSPoint: {160, 568}";
UIKeyboardFrameBeginUserInfoKey = "NSRect: {{inf, inf}, {0, 0}}";
UIKeyboardFrameChangedByUserInteraction = 0;
UIKeyboardFrameEndUserInfoKey = "NSRect: {{inf, inf}, {0, 0}}";
}}
NSRect: {{inf, inf}, {0, 0}}
似乎是个问题,因为当键盘显示时,这两个值是有效的。
该应用非常标准。这是一个导航堆栈,这发生在一个视图控制器上,堆栈中有4个级别。所有文本字段委托都已设置,我看不到有关视图或控制器的任何其他奇怪的内容。
有没有人见过这个?
答案 0 :(得分:4)
你还记得有关你的应用的任何细节吗?我认为它可能与iOS 6的方向API更改有关。我遇到了同样的问题,并且遇到了一些不直观的定向行为。
具体来说,我的应用程序指定UIInterfaceOrientationMaskPortraitUp
作为Info.plist和根UIViewController的supportedInterfaceOrientations:
实现中唯一允许的方向。我还从我的根UIViewController一直返回NO
shouldAutorotate
。我正在使用UIDevice的方向来确定如何呈现我的孩子UIViewControllers并使用所呈现的UIViewController类型和UIDeviceOrientation设置状态栏方向。
这导致了相当简单但在iPad(这是一款iPhone应用程序)上,当从面向风景的启动板启动时,呈现的UIViewController(和状态栏)将垂直于窗框定向,并且不会旋转回来
它还在iPhone 3GS上引起了一些非常奇怪的间歇性方向/窗口框架错误,其中RootViewController的框架被赋予了比设备更大的愚蠢尺寸。
我改变了什么(在我的根UIViewController中):
- (BOOL)shouldAutorotate
{
return YES;
}
- (NSUInteger)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskPortrait;
}
- (BOOL)shouldAutomaticallyForwardRotationMethods
{
return NO;
}
我也不再使用设备方向来确定正确的方向,仅依赖于呈现的UIViewController类(由导航决定)。这有解决直接的iPad方向错误的预期效果,但我没有看到奇怪的间歇性错误或你也遇到的键盘错误的实例。
答案 1 :(得分:0)
您是否在iOS 5.x模拟器上使用DCIntrospect?我遇到了同样的问题,发现错误的UIKeyboardFrameBeginUserInfoKey
值是由DCIntrospect引起的。 DCIntrospect可能会在收到UIKeyboardWillHideNotification
通知时尝试更改第一响应者。见代码:
- (void)takeFirstResponder
{
if (![self.inputTextView becomeFirstResponder])
NSLog(@"DCIntrospect: Couldn't reclaim keyboard input. Is the keyboard used elsewhere?");
}
通常,我们不应该在发布版本上启用DCIntrospect。所以最终用户不应该遇到这个问题。
答案 2 :(得分:-1)
设置
@interface UIController : UIViewController<UITextFieldDelegate>
并将数据委托从Xib分配给您的UITextfield。