2014-09-19 23 views
1

这是一个运行应用程序,在iOS 7下运行良好。刚启动iOS 8测试,在一个视图中输入数据所需的自定义键盘在连接到UITextView时崩溃或UITextField。对于仅应纵向显示的应用,实际的错误是无效的。iOS 8中UITextView的自定义键盘与方向错误崩溃

*终止应用程序由于未捕获的异常“UIApplicationInvalidInterfaceOrientation”,理由是:“支持的方向与应用程序中没有共同的方向和[UICompatibilityInputViewController shouldAutorotate]将返回YES”

所以它出现在崩溃发生当iOS 8的“兼容性”控制器以某种方式混合时从shouldAutorotate返回YES时,它应该返回NO。

我的应用程序是针对iPhone的项目/ plist中设置而已,它是唯一支持的方向是纵向,主视图NavController强制执行此用下面的代码

-(BOOL)shouldAutorotate 
{ 
    return NO; 
} 

- (UIBarPosition)positionForBar:(id<UIBarPositioning>)bar 
{ 
    return UIBarPositionTop; 
} 

- (NSUInteger)supportedInterfaceOrientations { 
    return UIInterfaceOrientationMaskPortrait; 
} 

每个视图控制器,包括视图控制器自定义键盘从shouldAutoRotate返回NO。我已经验证了shouldAutoRotate正在调用自定义键盘控制器,并在之后直接发生崩溃。

该一个怪异古怪在于shouldAutoRotate方法是没有得到所要求的控制器的自定义键盘被显示在视图中。textViewShouldBeginEditing当

定制键盘视图附连到由父视图控制器的TextView被称为需要自定义键盘的特定textView。

- (BOOL)textViewShouldBeginEditing:(UITextView *)textView { 
    if (textView == self.rangeText) { 
     [self showKeyboard]; 
     textView.inputView = keyboardView; 
     textView.inputAccessoryView = keyboardView; 
     [keyController setTextView: textView]; 
     keyController.maxCards = maxCards; 
     activeTextField = nil; 
    } 
    return YES; 
} 

- (void) showKeyboard { 
    if (!keyboardView) { 
     [self createCustomKeyboard]; 
    } 
    // Restore frame if it got wierd. 
    [keyboardView setFrame: keyboardFrame]; 
    [keyboardView setHidden: NO]; 
    [keyboardView becomeFirstResponder]; 
} 

- (void) createCustomKeyboard { 
    keyboardView = [[CardsInputView alloc] initWithFrame: self.view.frame]; 
    keyController = (CardsInputController *) [keyboardView nextResponder]; 
    errCheckNil(keyController); 
    keyController.view = keyboardView; 
    if (!keyFrameSet) { 
     keyboardFrame = keyboardView.frame; 
     keyFrameSet = YES; 
    } 
} 

回答

1

不知道为什么我会得到这个-1,因为它是一个明确记载的问题。无论如何,修复竟然是从UIApplication supportedInterfaceOrientationsForWindow返回UIInterfaceOrientationMaskPortrait,我一直在返回UIInterfaceOrientationMaskPortraitUpsideDown,但是对于这个应用程序来说,单个方向是首选。