xcode swift - 将文本格式化为电话号码[重复]
Posted
技术标签:
【中文标题】xcode swift - 将文本格式化为电话号码[重复]【英文标题】:xcode swift - formatting text as phone number [duplicate] 【发布时间】:2014-12-22 19:22:11 【问题描述】:我正在使用 Swift 创建一个 iPhone 应用程序。我正在尝试设置一个文本字段,用户可以在其中输入一个电话号码,该电话号码会自动格式化,就像在内置联系人应用程序中键入时一样。我希望 xcode 有这样做的内置方法。
作为替代方案,我创建了自己的代码,可以在用户键入和退格时添加和删除括号、破折号等,但是如果用户要将光标从输入文本的末尾移开,这很快就会出现问题.在联系人应用程序中,如果光标刚好移动到括号之后并且用户按退格键,它不仅会删除括号,还会删除括号前面的数字。我不确定这是否是通过一些内置的格式化方法完成的,或者是否有代码复制删除了括号、破折号等显示的文本并读取光标的位置,然后计算新字符串应该是什么, 并添加新的括号、破折号等。
具体来说,我想知道:
1) 是否有内置方法可以将文本格式化为与联系人应用程序中完全相同的电话号码?
2) 如果没有内置方法,谁能告诉我如何让 Swift 在光标位置读取?
谢谢!
【问题讨论】:
不是链接问题的副本 b/c 它是一种不同的语言。 【参考方案1】:没有内置的方法可以做到这一点。这是使用UITextField
的shouldChangeCharactersInRange
方法的一种实现:
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool
if textField == phoneTextField
var newString = (textField.text as NSString).stringByReplacingCharactersInRange(range, withString: string)
var components = newString.componentsSeparatedByCharactersInSet(NSCharacterSet.decimalDigitCharacterSet().invertedSet)
var decimalString = "".join(components) as NSString
var length = decimalString.length
var hasLeadingOne = length > 0 && decimalString.characterAtIndex(0) == (1 as unichar)
if length == 0 || (length > 10 && !hasLeadingOne) || length > 11
var newLength = (textField.text as NSString).length + (string as NSString).length - range.length as Int
return (newLength > 10) ? false : true
var index = 0 as Int
var formattedString = NSMutableString()
if hasLeadingOne
formattedString.appendString("1 ")
index += 1
if (length - index) > 3
var areaCode = decimalString.substringWithRange(NSMakeRange(index, 3))
formattedString.appendFormat("(%@)", areaCode)
index += 3
if length - index > 3
var prefix = decimalString.substringWithRange(NSMakeRange(index, 3))
formattedString.appendFormat("%@-", prefix)
index += 3
var remainder = decimalString.substringFromIndex(index)
formattedString.appendString(remainder)
textField.text = formattedString
return false
else
return true
正如之前在这个帖子中回答的那样:UITextField for Phone Number
【讨论】:
以上是关于xcode swift - 将文本格式化为电话号码[重复]的主要内容,如果未能解决你的问题,请参考以下文章