PDFView表单字段内配置键盘设置(Configuring keyboard settings w

2019-10-28 20:28发布

我正在从一个服务器加载PDF文件,并显示PDFView内的PDF文件的应用程序。 这些文件包含表单字段,其中用户是键入。 这是正常工作。 在PDF文件中的教育环境,其中的拼写应该被自动校正和预测文字应该提供给使用。

我还没有发现的装置在一个PDFView禁用自动更正,沿autocorrectionType =在一个的UITextField 的行。

我知道,用户可以手动禁用设备设置自动校正和预测性文本。 这不是在这种情况下(可能是用户的混乱和没有办法确认)可行的选择。 我很确定,如果有禁用自动更正应用范围的一种方式。

我们在公司内部创建的PDF文件,所以我们很确定,如果有什么东西而产生的文件,我们可以做的。 Adobe Acrobat是在表单域“检查拼写”选项,但设置没有任何效果,至少在PDFView。

谢谢。

Answer 1:

我找到了解决办法。 这是一个黑客,但我会采取什么我可以得到的。

我发现,当用户点击一个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];
    }
  }
}


文章来源: Configuring keyboard settings within PDFView form fields