我有一个将文本字段格式化为电话号码的功能,但此功能仅在我保存托管对象上下文后才起作用。例如,我有一个UITableView,其中包含用于文本字段的静态单元格作为联系表单。当我创建一个新联系人时(在我保存联系人之前),电话号码的文本字段不会被我的功能格式化,但在我保存该联系人并重新打开它之后,请输入一个电话号码格式正确。我试图找出这是为什么,以及我做了什么,以便在任何一种情况下数字格式化。这是我用来格式化电话号码的功能。
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
if textField == phoneTxt {
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
}
}
`
答案 0 :(得分:0)
当表单用于创建 new 对象时,您似乎没有设置文本字段的委托。在这种情况下,检查是否正在调用已发布的函数。