【问题标题】:Format inputed digits to US phone number to format (###) ###-####将输入的数字格式化为美国电话号码以格式化(###)###-####
【发布时间】:2023-04-03 19:47:01
【问题描述】:

我使用了这段代码,但我遇到的问题是,如果 texfield 为空(索引超出范围),它不起作用,另一个问题是如果用户没有更改电话号码并点击保存按钮,它将再次执行代码并插入“((”和“--”)。

关于我能做什么的任何想法?

var stringts: NSMutableString = self.ts.text
stringts.insertString("(", atIndex: 0)
stringts.insertString(")", atIndex: 4)
stringts.insertString("-", atIndex: 5)
stringts.insertString("-", atIndex: 9)
self.ts.text = stringts

【问题讨论】:

  • 输入时是否格式化文本?
  • 我想要该功能,但我的代码在单击“保存”后会格式化文本字段
  • 等一下,我已经做到了!

标签: ios swift format nsmutablestring


【解决方案1】:

您可以在用户输入时验证输入。使用UITextFieldDelgate 这样做:

func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {

    let str = (textField.text! as NSString).stringByReplacingCharactersInRange(range, withString: string)

    if textField == txtFieldPhoneNumber{

        return checkEnglishPhoneNumberFormat(string, str: str)

    }else{

        return true
    }
}

验证输入的函数:

func checkEnglishPhoneNumberFormat(string: String?, str: String?) -> Bool{

    if string == ""{ //BackSpace

        return true

    }else if str!.characters.count < 3{

        if str!.characters.count == 1{

            txtFieldPhoneNumber.text = "("
        }

    }else if str!.characters.count == 5{

        txtFieldPhoneNumber.text = txtFieldPhoneNumber.text! + ") "

    }else if str!.characters.count == 10{

        txtFieldPhoneNumber.text = txtFieldPhoneNumber.text! + "-"

    }else if str!.characters.count > 14{

        return false
    }

    return true
}

希望这会有所帮助!

【讨论】:

  • 我需要调用什么函数?你能举个例子,你会怎么称呼它?谢谢!
  • @RayKing 你只需要把delegate 给你的UITextField。即:yourTextFieldOutlet.delegate = self
  • 我有这个代码的错误。当我输入电话号码时,我的其他文本字段正在更改它们的值。他们也设置委托并受此代码影响。
  • 太棒了!感谢您的快速响应!
猜你喜欢
  • 1970-01-01
  • 2010-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-06
  • 1970-01-01
  • 2015-10-02
相关资源
最近更新 更多