我正在从一个服务器加载PDF文件,并显示PDFView内的PDF文件的应用程序。 这些文件包含表单字段,其中用户是键入。 这是正常工作。 在PDF文件中的教育环境,其中的拼写不应该被自动校正和预测文字不应该提供给使用。
我还没有发现的装置在一个PDFView禁用自动更正,沿autocorrectionType =在一个的UITextField 假的行。
我知道,用户可以手动禁用设备设置自动校正和预测性文本。 这不是在这种情况下(可能是用户的混乱和没有办法确认)可行的选择。 我很确定,如果有禁用自动更正应用范围的一种方式。
我们在公司内部创建的PDF文件,所以我们很确定,如果有什么东西而产生的文件,我们可以做的。 Adobe Acrobat是在表单域“检查拼写”选项,但设置没有任何效果,至少在PDFView。
谢谢。
我找到了解决办法。 这是一个黑客,但我会采取什么我可以得到的。
我发现,当用户点击一个PDF文本字段,PDFKit隐藏了PDF文本字段,并覆盖在同一地点一个UITextView。 它叫UITextView中的第一个响应者,并带来了键盘。 这UITextView的保持,直到用户点击其他地方,当它被删除,与包含(现在死了)的UITextView的内容的PDF文本字段所取代。
有问题的是UITextView中埋藏在内心深处PDFView,私人UIView的子类中。
下面是我使用的代码。 它以一个视图(PDFView),并寻找任何的UITextView它可以找到深潜水。 如果找到了,就辞去第一响应,改变参数,并再次成为第一个响应者。 用户将看到预输入按钮短暂出现然后消失。 我还没有找到解决的办法,因为我们没有访问到的UITextView,直到它已经是第一个响应者。
代码在这里通过执行每0.1秒的计时器调用。 我敢肯定,有更高效的方法可以做到这一点,但这个工程,勉强登记的CPU米。
此代码还设置了的UITextView的pasteDelegate因为在我的情况下,我想重写,防止文本粘贴到的UITextView。 做到这一点的代码很简单; 在textPasteConfigurationSupporting
只是返回[item setNoResult]
与所有类似的黑客攻击,确保与iOS的所有版本的应用程序支持,以测试 - 包括未来的版本。 苹果可以轻易改变自己的PDFKit执行导致此崩溃或出现异常。 或者更好,他们可以添加支持的手段来做到这一点。
-(void)lookForTextViewsInView:(UIView *)view
for (UIView *subview in view.subviews) {
if ([subview isKindOfClass:[UITextView class]]) {
UITextView *textView = (UITextView *)subview;
//NSLog(@"Found text field with contents: %@",textView.text);
if (textView.autocapitalizationType == UITextAutocapitalizationTypeNone &&
textView.autocorrectionType == UITextAutocorrectionTypeNo &&
textView.spellCheckingType == UITextSpellCheckingTypeNo &&
textView.pasteDelegate == self) {
//NSLog(@"textView %@ is already adjusted", textView.text);
return;
}
if (textView.isFirstResponder) {
//NSLog(@"Adjusting and resetting first responder of %@",textView.text);
[textView resignFirstResponder];
textView.autocapitalizationType = UITextAutocapitalizationTypeNone;
textView.autocorrectionType = UITextAutocorrectionTypeNo;
textView.spellCheckingType = UITextSpellCheckingTypeNo;
textView.pasteDelegate = self;
[textView becomeFirstResponder];
} else {
//I don't think this ever fires, but here for completion's sake
//NSLog(@"Adjusting without resetting first responder of %@",textView.text);
textView.autocapitalizationType = UITextAutocapitalizationTypeNone;
textView.autocorrectionType = UITextAutocorrectionTypeNo;
textView.spellCheckingType = UITextSpellCheckingTypeNo;
textView.pasteDelegate = self;
}
} else {
//NSLog(@"%@ is not a UITextView", [subview class]);
[self lookForTextViewsInView:subview];
}
}
}