UITextField右对齐iOS 7

Posted

技术标签:

【中文标题】UITextField右对齐iOS 7【英文标题】:UITextField Right Alignment iOS 7 【发布时间】:2013-12-17 16:01:17 【问题描述】:

我有一个问题,在 ios7 上右对齐 UITextField 时,当用户键入“空格”时,它不会立即出现。如果我键入另一个字符,则会出现空格。

在 iOS 6 中不会发生

http://www.blogosfera.co.uk/2013/10/ios-7-whitespace-not-visible-to-uitextfield-with-right-alignment/

有人知道如何解决这个问题吗?

【问题讨论】:

请提供更多细节或您做了什么,以便我们正确理解 【参考方案1】:
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string

    if (range.location == textField.text.length && [string isEqualToString:@" "]) 
        // ignore replacement string and add your own
        textField.text = [textField.text stringByAppendingString:@"\u00a0"];
        return NO;
    
    // for all other cases, proceed with replacement
    return YES;

从文本中删除代码

self.txtFirstName.text = [self.txtFirstName.text stringByReplacingOccurrencesOfString:@"\u00a0" withString:@" "];

来自这个 *** 答案 - Right aligned UITextField spacebar does not advance cursor in iOS 7

【讨论】:

对我来说无法正常工作,我必须按两次空格键才能开始在字符串末尾添加空格,并且在退格按钮删除最后一个空格字符的情况下也会发生同样的情况。【参考方案2】:

我不知道如何解决,但我有一个建议,您可以同时将所有空格替换为非常相似的 unicode 字符(如 U+00A0),然后将它们切换回来已输入字符?

只需在 .h 中包含 <UITextFieldDelegate>,在 viewDidLoad 中设置 UITextField.delegate = self;

然后执行如下操作:

 //!!!!!*****!*!*!!!*!*** Make SURE you set the delegate code before doing this (as mentioned in the original SO answer)

 -(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
    if ([string isEqualToString:@" "]) 
        textField.text = [textField.text stringByReplacingCharactersInRange:range withString:@"\u00A0"];//U+00A0 is a unicode character that seems very similar to space but isn't treated as whitespace...
     else 
        textField.text = [textField.text stringByReplacingOccurrencesOfString:@"\u00A0" withString:@" "];//switches our u+00A0 unicode character back to a white-space everytime a space is not typed.
    
    return (![string isEqualToString:@" "]);//returns YES if it doesn't equal whitespace, else NO (because we did a manual replace)

*注意,我还没有机会对此进行测试,因为我不在 xCodeProj 附近。让我知道它是如何工作的 :) 如果有人看到任何错误,请随时进行编辑 O:) 谢谢大家!

【讨论】:

@AkshitZaveri 也许 Apple 仍然将 U+2004 解释为空格...尝试使用类似于空格的不同 unicode 字符! 点赞 U+3000(查找和替换) 是的,你贴的代码和这个一样(实际上),U+00A0是正确的unicode字符!我们的代码中唯一的主要区别是,在我的代码中,它在输入完成后将 unicode 字符替换为空格,而在您的代码中则没有,它们永远保持为 U+00A0,而在您的代码中,它仅在以下情况下进行更改用户在最后打字,这可能是最好的(除非你将 U+00A0 改回来,即使他们没有在最后打字,你也需要这样做,所以它不会在我的工作中工作......我'将在我的新角色中编辑! 另一个问题是:假设你输入“a”然后空格然后“b”。现在删除“b”。空格消失了,因为你已经替换了代码。所以,实际上最好不要替换代码。在使用文本字段中的文本之前完全替换代码。 @AkshitZaveri 好点!哇! :) 您可以在我的代码中解决这两个问题...更改范围很容易,退格也不会太难...但我只会提交您发布的代码。

以上是关于UITextField右对齐iOS 7的主要内容,如果未能解决你的问题,请参考以下文章

占位符右对齐的 UITextField 不能正确向右移动

在 UITextField 中右对齐 PlaceHolder 文本

如何对齐 UITextField 中的文本?

IOS 13:UITextField rightView的间距问题

强制 UITableViewCell 在方向更改时保持对象右对齐

iOS UITextField光标/文字起始位置