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(@"string was not found");
}
else
{
;
}
textField.text = string;
}
-(void) checkDoubleAB: (UITextField*) textField
{
NSMutableString *string =;
NSRange range = ;
if (range.location == NSNotFound)
{
NSLog(@"string was not found");
}
else
{
;
}
textField.text = string;
}
- (void) checkDoubleSpace: (UITextField*) textField
{
NSMutableString *string =;
NSRange range = ;
if (range.location == NSNotFound)
{
NSLog(@"String was not found");
}
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]