ユーザータイプとして「入力を電話番号にフォーマット」しようとしているカスタムUITextFieldがあります。私が達成したいこと:
+
削除できない最初の文字として UITextField にプレフィックス記号を追加します。String 変数と UITextField のテキストの両方を、ユーザーが入力する単純な数字(4929112345678)ではなく、適切な電話番号(+49 291 12345678)の形式でフォーマットします。
私が調査したところ、そのための組み込みの方法がないことがわかりました。入力文字列を電話番号にフォーマットするためのPhoneNumberKitという使いやすいライブラリも見つけました。プレイグラウンドでは、次のように機能します..
let rawNumberArray = "+4929112345678"
let phoneNumbers = PartialFormatter().formatPartial(rawNumberArray)
print(phoneNumbers) // "+49 291 12345678"
ライブラリが+
適切にフォーマットするには、最初の文字として文字列が必要であることに注意してください。
UITextField に実装してみました。
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool
{
if textField == myTextField {
let candidateString : NSString = (textField.text! as NSString).stringByReplacingCharactersInRange(range, withString: string)
let updatedTextString : NSString = PartialFormatter().formatPartial(candidateString as String)
self.formattedPhoneNumber(updatedTextString, textField: textField)
}
return true
}
func formattedPhoneNumber(updatedTextString: NSString, textField: UITextField) {
// textField.text = "+\(updatedTextString as String)"
print(updatedTextString)
}
textField.text = "+\(updatedTextString as String)"
コメントし続けると、print(updatedTextString)
適切にフォーマットされた文字列がコンソールに出力されますが、UI の UITextField 内には、「4929112345678」のような単純な構造化されていない数字が表示されるだけです。
コメントを外すと、おかしくなり始め、UITextField は UI に重複した文字を表示し始めますが、印刷用のコンソール ログもかなりおかしくなります。私も前に空にしてみtextField.text = ""
ましたが、どちらもうまくいきませんでした。
私は何を間違っていますか?うまく機能しないのに何が足りないのですか?ライブラリ自体ではなく、私に関連していると思います。
また、この問題を解決するための他の提案 (またはライブラリ) があれば、共有してください。