UITextView使用日语键盘时,attributedText会重复输入。

9

我需要在文本视图中使用两种不同的字体,因此我在textViewDidChange中设置了attributedText。但是对于日语键盘,输入字符会重复输入。

对于英语键盘,它可以正常工作。当您使用普通文本而不是attributedText时,对于日语键盘也有效。

我的代码:

- (void)viewDidLoad {
    [super viewDidLoad];

    UITextView *textView = [[UITextView alloc] initWithFrame:self.view.frame];
    textView.delegate = self;
    [self.view addSubview:textView];
}

- (void)textViewDidChange:(UITextView *)textView
{
    NSLog(@"TOTAL: %@", textView.text);

    textView.attributedText = [[NSMutableAttributedString alloc] initWithString: textView.text];
}

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
    NSLog(@"ADDED: %@", text);

    return YES;
}

输出:

2015-07-15 13:51:10.156 japKeyTest[32163:5765000] ADDED: a
2015-07-15 13:51:10.167 japKeyTest[32163:5765000] TOTAL: あ
2015-07-15 13:51:11.376 japKeyTest[32163:5765000] ADDED: a
2015-07-15 13:51:11.378 japKeyTest[32163:5765000] TOTAL: あああ
2015-07-15 13:51:12.054 japKeyTest[32163:5765000] ADDED: a
2015-07-15 13:51:12.055 japKeyTest[32163:5765000] TOTAL: ああああああ

期望结果:

2015-07-15 13:51:10.156 japKeyTest[32163:5765000] ADDED: a
2015-07-15 13:51:10.167 japKeyTest[32163:5765000] TOTAL: あ
2015-07-15 13:51:11.376 japKeyTest[32163:5765000] ADDED: a
2015-07-15 13:51:11.378 japKeyTest[32163:5765000] TOTAL: ああ
2015-07-15 13:51:12.054 japKeyTest[32163:5765000] ADDED: a
2015-07-15 13:51:12.055 japKeyTest[32163:5765000] TOTAL: あああ

有没有办法使用日语键盘输入带有属性的文本并获得正常结果?(不带额外字符)

真是巧合啊:我刚开始一份新工作,这就是我要修复的第一个bug之一。我简直不敢相信这不会影响到支持日语的成千上万个应用程序! - Paul Bruneau
另外:尝试使用罗马字输入法键入“mika”,看看是否会在额外字符中间出现“k”!我敢肯定这是相同的错误。 - Paul Bruneau
这对我来说也是使用普通英语键盘时发生的。 - villy393
2个回答

8

这个回答 帮助我理解了这个问题: 检查UITextView上的markedTextRange是否为nil。这意味着用户正在输入多阶字符。在他们完成之前,暂停编辑attributedText。


0

我的经验告诉我,这个问题(我相信是一个UIKit的bug)会在任何时候出现,只要在-textView(Field)DidChange time期间修改了UITextFieldUITextView-attributedText属性(就像你的例子中一样)。

在我的情况下,我能够改变代码,使得更新不会发生在那个时间段内(在我的情况下,更新根本不需要,所以这很容易实现)。

如果你需要在那个时间段内更新属性文本,我唯一能建议的就是向苹果报告这个bug并等待(可能是永远或更久)。

请注意,即使你只是更新这些对象的-text属性,你也可能会遇到这个bug,因为UIKit有时(总是?)会在你更新-text时自动更新-attributedText属性。(你可以通过子类化这些对象并重写-setAttributedText:方法并设置断点来观察到这一点。

祝你好运!

编辑:到目前为止,我只看到了使用日语键盘时出现了这个bug,但是随着我在应用程序使用其他语言方面的经验增加,我也不会感到惊讶如果会出现更多的问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接