我正在格式化我的文本文本,一旦用户开始键入电话号码到这种格式类型0 (555) 444 66 77
,它工作正常,但一旦我从服务器获得的号码,我得到它像这样的05554446677
,请你能告诉我,我如何才能编辑它在相同的格式,一旦我从服务器得到它?
一旦我开始输入,我的代码:
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
if textField == phoneNumberTextField{
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 > 11 && !hasLeadingOne) || length > 12{
var newLength = (textField.text as NSString).length + (string as NSString).length - range.length as Int
return (newLength > 11) ? false : true
}
var index = 0 as Int
var formattedString = NSMutableString()
if hasLeadingOne{
formattedString.appendString("1 ")
index += 1
}
if (length - index) > 1{
var zeroNumber = decimalString.substringWithRange(NSMakeRange(index, 1))
formattedString.appendFormat("%@ ", zeroNumber)
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
}
if (length - index) > 3{
var prefix = decimalString.substringWithRange(NSMakeRange(index, 2))
formattedString.appendFormat("%@ ", prefix)
index += 2
}
var remainder = decimalString.substringFromIndex(index)
formattedString.appendString(remainder)
textField.text = formattedString as String
return false
}else{
return true
}
}
10条答案
按热度按时间pengsaosao1#
屏蔽号码拼写
从UITextField委托方法调用上述函数:
所以,这样做效果更好。
vnjpjtjt2#
非常简单的解决方案:
用途:
wsewodh23#
SWIFT 3和4
此解决方案在应用格式之前删除所有非数字字符。如果无法根据假设设置源电话号码的格式,则返回
nil
。雨燕4
SWIFT 4解决方案解释了CharacterView和Sting不受欢迎的原因,因为CharacterView是一个字符集合。
雨燕3
示例
输出示例
bwitn5fc4#
对字符串中的字符进行操作并不是非常简单。您需要执行以下操作:
SWIFT 2.1
SWIFT 2.0
代码将打印
0 (555) 444 66 77
mzsu5hc05#
SWIFT 4
创建此函数并调用文本字段事件编辑已更改
bybem2ql6#
SWIFT 5.1更新ДаріяПрокопович卓越解决方案
用途:
n8ghc7c17#
您可以使用此库https://github.com/luximetr/AnyFormatKit
示例
使用起来非常简单。
nnt7mjpx8#
SWIFT 3,但也应可翻译为SWIFT 4
1.错误处理
1.创建图案
1.插入函数
1.用法
qlckcl4x9#
这里有很多好的答案,但我采取了一种完全不同的方法,我想我应该分享一下,以防有帮助。
首先,我将格式化步骤和组件分解为各自独立的职责。
电话号码格式通常可以分为本地、国内或国际格式类型,这些类型因字符串长度而异。
我定义了类型:
然后定义了可用于设置电话号码字符串格式的分隔符:
接下来,我定义了格式规则,用于指定插入分隔符(如+、-等)的索引(在电话号码字符串中)。
定义了这些规则后,我创建了将规则与给定格式类型相关联的规则集。
以这种方式定义所有内容后,您可以快速设置规则集以适应您需要的任何格式。
以下是为美国通常使用的连字符格式的电话号码字符串定义3条规则的规则集示例:
格式化逻辑的重担(不是很重)发生在下面:
我已经创建了一个框架,其中包含一个示例项目,您可以在此处查看:https://github.com/appteur/phoneformat
下面是你打字时的工作原理:
我还对它进行了设置,这样您就可以使用CocoaPods导入它。
然后使用它:
ecfdbz9o10#
这是将完全满足您的要求的扩展: