CustomTextField - 自动完成/自动更正不会在点击时关闭

时间:2012-06-06 13:30:03

标签: ios autocomplete core-text uitextinput

所以我使用核心图形创建了一个自定义文本视图,并使其符合UITextInput和UITextInputTraits协议。一切都很好,除了一个奇怪/恼人的行为。键盘正确显示自动正确的建议,但当用户点击标有“X”的建议时,它不会忽略该建议,而是插入建议。我已经检查过了,在所有其他程序中,点击一个带有'X'的建议就驳回了这个建议。我该如何解决这个问题?

在我的自定义文本视图中,我有以下iVars:

//UITextInputTraits
UITextAutocapitalizationType _uiAutoCap;
UITextAutocorrectionType _uiAutoCorrect;
UITextSpellCheckingType _uiSpellCheck;
UIKeyboardType _uiKeyboard;
UIKeyboardAppearance _uiKeyboardAppearance;
UIReturnKeyType _uiReturnType;
BOOL _uiEnableAutoReturn;
BOOL _uiSecureText;

哪些合成到适当的TextInputTraits属性:

@synthesize autocapitalizationType=_uiAutoCap, autocorrectionType=_uiAutoCorrect, spellCheckingType=_uiSpellCheck, keyboardType=_uiKeyboard, keyboardAppearance=_uiKeyboardAppearance, returnKeyType=_uiReturnType, inputDelegate=_uiTextDelegate, enablesReturnKeyAutomatically=_uiEnableAutoReturn, secureTextEntry=_uiSecureText;

并使用以下默认值初始化它们:

    _uiAutoCorrect = UITextAutocorrectionTypeDefault;
    _uiSpellCheck = UITextSpellCheckingTypeDefault;
    _uiKeyboardAppearance = UIKeyboardAppearanceDefault;
    _uiAutoCap = UITextAutocapitalizationTypeNone;
    _uiReturnType = UIReturnKeyDefault;
    _uiEnableAutoReturn = NO;
    _uiSecureText = NO;
    _uiKeyboard = UIKeyboardTypeDefault;

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

编辑:可能的答案

当您点按以关闭建议时,您的点击可能会先被您的视图拦截,这可能会更改所选文本的范围(这会导致UITextInput接受该建议)。不是最好的解决方案,但是UITextInput调用

- (NSDictionary *)textStylingAtPosition:(UITextPosition *)position inDirection:(UITextStorageDirection)direction;

当它想提出建议时,你可以有一个ivar(BOOL)来存储是否有建议(每当调用UIKeyInput方法时它的值为NO,而在调用textStyling方法时为YES) 。然后,修改你的手势识别器,这样如果前面提到的ivar是YES并且点击位于建议框的矩形中它就不会改变选择(你可以通过加倍从 - (CGRect)返回的矩形的高度来获得这个矩形) firstRectForRange:(UITextRange *)range;)。希望有效。

编辑:您应该能够实现UIGestureRecognizerDelegate方法:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch;

因此,如果touch.view ==(yourTextView)

,它只接受触摸

我遇到同样的问题,还没有解决方案;但是,我确实认为你应该通过创建返回你想要的属性值的函数来符合UITextInputTraits。示例:对于特征UITextAutoCorrectionType的值为UITextAutocorrectionTypeDefault,您应该提供一个访问器方法:

- (UITextAutocorrectionType)autocorrectionType {
    return UITextAutocorrectionTypeDefault;
}