菜鸟教程小白 发表于 2022-12-12 21:13:32

ios - 替换文本时更正 UITextField 中的文本光标


                                            <p><p>我正在为输入到 <code>UITextField</code> 中的文本实现快捷方式替换。</p>

<p>例如,如果文本字段已经包含“a”并且他在其后键入另一个“a”,我会将其替换为“ä”。在另一种情况下,如果他键入“a”,然后键入“b”,我会将其替换为“XYZ”。如果文本包含两个连续的空格,我喜欢用一个空格替换它们。</p>

<p>因此,根据用户键入的内容,我可能会将其替换为更长、更短或相同长度的文本。</p>

<p><em>简单</em>的方法是实现 <code>[UITextFieldDelegate textField: shouldChangeCharactersInRange: ...</code> 委托(delegate)函数,将替换文本分配给 <code>textField.text </code>,并返回NO。</p>

<p>但这也需要相应地调整光标位置,这就是我正在努力解决的问题。</p>

<p>我目前正在“手动”处理此光标定位。这有点难看,所以我想知道是否有更优雅的解决方案。毕竟,更换文本后处理光标位置的所有代码(例如,选择,然后粘贴时)已在<code> uitextfield </code>代码中实现。我只是想知道是否有更多它是为了满足我的需求而暴露出来的,而我还没有找到它。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>我真的认为您不需要 <code>textField:shouldChangeCharactersInRange:replacementString:</code>。有一种简单的方法可以解决您的要求,并且该解决方案不会出现光标问题。</p>

<p>您应该在 <code>viewDidLoad</code> 中添加这行代码(<code>self.textField</code> 是您的 <code>UITextField</code>):</p>

<pre><code>[ addObserver:self selector:@selector(shortcut:) name:UITextFieldTextDidChangeNotification object:self.textField];
</code></pre>

<p>然后,您应该添加选择器,例如:</p>

<pre><code>- (void) shortcut: (NSNotification*) notification
{
    UITextField *notificationTextField = ;

    if (notificationTextField == self.textField)
    {
      ;
      ;
      ;
    }
}
</code></pre>

<p>那么你只需要添加3个方法来检查你的快捷方式:</p>

<pre><code>-(void) checkDoubleA: (UITextField*) textField
{
    NSMutableString *string =;
    NSRange range = ;
    if (range.location == NSNotFound)
    {
      NSLog(@&#34;string was not found&#34;);
    }
    else
    {
      ;
    }
    textField.text = string;
}

-(void) checkDoubleAB: (UITextField*) textField
{
    NSMutableString *string =;
    NSRange range = ;
    if (range.location == NSNotFound)
    {
      NSLog(@&#34;string was not found&#34;);
    }
    else
    {
      ;
    }
    textField.text = string;
}

- (void) checkDoubleSpace: (UITextField*) textField
{
    NSMutableString *string =;
    NSRange range = ;
    if (range.location == NSNotFound)
    {
      NSLog(@&#34;String was not found&#34;);
    }
    else
    {
      ;
    }
    textField.text = string;
}
</code></pre>

<p>您可以下载此代码的演示 <a href="https://github.com/GabrielMassana/UITextField_Shortcut" rel="noreferrer noopener nofollow">here</a> .</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 替换文本时更正 UITextField 中的文本光标,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/22886361/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/22886361/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 替换文本时更正 UITextField 中的文本光标