这是一个可以在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/