【问题标题】:Formating phone number does not work fine格式化电话号码无法正常工作
【发布时间】:2017-01-16 11:27:44
【问题描述】:

我正在尝试格式化用户输入的电话号码。我已经实现了这个:

import UIKit

class ViewController: UIViewController {
var phoneNumberTextField : UITextField?
var docController: UIDocumentInteractionController?

override func viewDidLoad() {
    super.viewDidLoad()
    phoneNumberTextField = UITextField(frame: CGRectMake(10, 150, 100, 50))
    phoneNumberTextField?.backgroundColor = UIColor.brownColor()
    self.view.addSubview(phoneNumberTextField!)


}

func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool
{
    if (textField == phoneNumberTextField)
    {
        let newString = (textField.text! as NSString).stringByReplacingCharactersInRange(range, withString: string)
        let components = newString.componentsSeparatedByCharactersInSet(NSCharacterSet.decimalDigitCharacterSet().invertedSet)

        let decimalString = components.joinWithSeparator("") as NSString
        let length = decimalString.length
        let hasLeadingOne = length > 0 && decimalString.characterAtIndex(0) == (1 as unichar)

        if length == 0 || (length > 10 && !hasLeadingOne) || length > 11
        {
            let newLength = (textField.text! as NSString).length + (string as NSString).length - range.length as Int

            return (newLength > 10) ? false : true
        }
        var index = 0 as Int
        let formattedString = NSMutableString()

        if hasLeadingOne
        {
            formattedString.appendString("1 ")
            index += 1
        }
        if (length - index) > 3
        {
            let areaCode = decimalString.substringWithRange(NSMakeRange(index, 3))
            formattedString.appendFormat("(%@)", areaCode)
            index += 3
        }
        if length - index > 3
        {
            let prefix = decimalString.substringWithRange(NSMakeRange(index, 3))
            formattedString.appendFormat("%@-", prefix)
            index += 3
        }

        let remainder = decimalString.substringFromIndex(index)
        formattedString.appendString(remainder)
        textField.text = formattedString as String
        return false
    }
    else
    {
        return true
    }
}
}

来自Here。当我运行应用程序并开始添加数字时,没有任何反应。括号和连字符不会出现。我想将 (197)-444-4444 转换为 1974444444。

这里有什么问题?

【问题讨论】:

  • 我只是建议你使用委托方法。

标签: ios swift


【解决方案1】:

您似乎没有为您的文本字段设置委托:

phoneNumberTextField.delegate = self

而且您的视图控制器似乎不符合 UITextFieldDelegate 之类的:

class ViewController: UIViewController, UITextFieldDelegate {

此外,它永远不会是 nil,所以只需将其更改为 var phoneNumberTextField : UITextField!

【讨论】:

  • 无法将值赋给类型 Viewcontroller 以键入 UITextField
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-10-02
  • 1970-01-01
  • 2022-07-06
  • 2020-02-05
  • 1970-01-01
相关资源
最近更新 更多