有没有办法控制在输入UITextField时弹出的自动更正视图的位置
默认情况下,它始终显示在文本字段的下方。然而,在像SMS这样的苹果应用程序中,它有时会出现在文本字段的上方。
对于在键盘正上方对齐的文本字段,键盘会阻止自动更正,因此无法使用。
发布于 2011-06-18 18:16:26
自动更正提示的位置由firstRect...UITextInput协议的方法。不幸的是,UITextField使用私有类作为这个协议的委托,所以你不能子类化和覆盖它。
但是,您可以通过自己绘制内容来实现自己的UITextField替换(如使用CoreText),实现自己的选择和放大镜处理,然后您将能够影响自动更正提示的位置。虽然它被设计成总是在编辑后的文本下面,所以你实际上必须躺在firstRect上……方法。
长话短说:这太麻烦了。
发布于 2012-06-21 19:25:06
它对我有效的一个答案是使用textview/textview的setInputAccessoryView方法。我有一个包含textView的工具栏。如果我将工具栏设置为文本字段的inputaccessoryview,并将工具栏的clipsToBound属性设置为NO,我不知道确切的原因,但气球出现在键盘上方
发布于 2012-11-06 12:21:57
这是一个使用私有API的解决方案,因为没有办法使用公共API来实现此目的。
使用swizzled
- (void) moveSpellingCorrection {
for (UIView *view in self.subviews)
{
if ([[[view class] description] isEqualToString:@"UIAutocorrectInlinePrompt"])
{
UIView *correctionShadowView = nil; // [view correctionShadowView];
for (UIView *subview in view.subviews)
{
if ([[[subview class] description] isEqualToString:@"UIAutocorrectShadowView"])
{
correctionShadowView = subview;
break;
}
}
if (correctionShadowView)
{
UIView *typedTextView = nil; //[view typedTextView];
UIView *correctionView = nil; //[view correctionView];
for (UIView *subview in view.subviews)
{
if ([[[subview class] description] isEqualToString:@"UIAutocorrectTextView"])
{
if (CGRectContainsRect(correctionShadowView.frame,subview.frame))
{
correctionView = subview;
}
else
{
typedTextView = subview;
}
}
}
if (correctionView && typedTextView)
{
CGRect textRect = [typedTextView frame];
CGRect correctionRect = [correctionView frame];
if (textRect.origin.y < correctionRect.origin.y)
{
CGAffineTransform moveUp = CGAffineTransformMakeTranslation(0,-50.0);
[correctionView setTransform: moveUp];
[correctionShadowView setTransform: moveUp];
CGRect windowPos = [self convertRect: view.frame toView: nil ];
[view removeFromSuperview];
[self.window addSubview: view];
view.frame = windowPos;
}
}
}
}
}}
有关更多详细信息,请访问check。
https://stackoverflow.com/questions/911323
复制相似问题