这是一个可以在iOS 7下正常运行的运输应用程序。刚刚开始进行iOS 8测试,并且将附加到UITextView或UITextField的自定义键盘在一个视图中输入数据所必需的崩溃。对于仅应为纵向的应用,实际错误是方向无效。

*由于未捕获的异常“UIApplicationInvalidInterfaceOrientation”而终止应用程序,原因:“支持的方向与应用程序没有共同的方向,并且[UICompatibilityInputViewController shouldAutorotate]返回YES”

因此,当混合中以某种方式出现的iOS 8“兼容性”控制器从shouldAutorotate返回YES(应返回NO)时,似乎发生了崩溃。

我的应用仅针对iPhone,在项目/列表设置中仅受支持的方向是纵向,NavController的主视图通过以下代码来强制实现

-(BOOL)shouldAutorotate
{
    return NO;
}

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

- (NSUInteger)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskPortrait;
}

每个视图控制器,包括用于自定义键盘的视图控制器,均应从shouldAutoRotate返回“否”。我已验证了应该为自定义键盘控制器调用了AutoAutoRotate,并且崩溃随后直接发生。

怪异的是,对于显示自定义键盘的视图,控制器未调用shouldAutoRotate方法。

当为需要自定义键盘的特定textView调用textViewShouldBeginEditing时,该父视图控制器将自定义键盘视图附加到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,因为这是一个明确记录的问题。无论如何,该修复程序原来是从UIApplication supportInterfaceOrientationsForWindow返回UIInterfaceOrientationMaskPortrait,我一直在返回UIInterfaceOrientationMaskPortraitUpsideDown,但是对于此应用程序,首选单个方向。

关于ios - iOS 8中UITextView的自定义键盘因方向错误而崩溃,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25943655/

10-09 15:34