【问题标题】:UITextView attributedText with Japanese keyboard repeats input带有日文键盘的 UITextView 属性文本重复输入
【发布时间】:2023-03-17 03:43:02
【问题描述】:

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

它适用于英文键盘。 当您使用普通文本而不是属性文本时,它也适用于日文键盘。

我的代码:

- (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: あああ

知道如何使用日文键盘输入属性文本并获得正常结果吗? (没有多余的字符)

【问题讨论】:

  • 这个巧合真是太棒了:我刚开始一份新工作,这是我尝试修复的第一个错误。我不敢相信这不会影响成千上万支持日语的应用程序!
  • 另外:尝试使用罗马字输入“mika”,看看是否在多余字符中间出现“k”!我确定这是同一个错误。
  • 使用普通英文键盘的我也会发生这种情况。

标签: ios objective-c keyboard uitextview


【解决方案1】:

我的经验告诉我,只要在 -textView(Field)DidChange time 期间修改了 -attributedText-attributedText 属性,UITextViewUITextView 就会出现该错误(我相信这是一个 UIKit 错误)就像你的例子一样)。

在我的情况下,我能够更改代码,以便在此期间不会发生更新(在我的情况下根本不需要更新,所以这很容易)。

如果您当时需要更新属性文本,我只能向 Apple 提交错误并等待(永远或更长时间)。

请注意,即使您只更新这些对象的 -text 属性,您也可能会看到此错误 - 因为 UIKit 有时(总是?)会在您更新时继续为您更新 -attributedText 属性-text。 (您可以通过子类化这些对象并覆盖 -setAttributedText: 并设置断点来看到这一点。

祝你好运

编辑:到目前为止,我只在日文键盘上看到过这个错误,但随着我对我的应用程序使用其他语言的经验越来越多,看到更多问题我不会感到惊讶。

【讨论】:

    【解决方案2】:

    This answer 帮我弄清楚了: 检查 UITextView 上的标记文本范围是否不为零。这意味着用户正在输入多级字符。等到它们完成后再编辑属性文本。

    【讨论】:

      猜你喜欢
      • 2020-02-24
      • 1970-01-01
      • 2016-02-13
      • 2011-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-17
      • 1970-01-01
      相关资源
      最近更新 更多