Repository files navigation

iPhoneNumberField ☎️

Format phone numbers as they're typed—entirely in SwiftUI. 📱

Get Started | Examples | Customize | Features | Install | Pricing

CI


And it's as easy as

iPhoneNumberField("Phone", text: $text)

CI

Get Started

  1. InstalliPhoneNumberField.

  2. Add iPhoneNumberField to your project.

import SwiftUI
import iPhoneNumberField
structContentView:View{@Statevartext=""varbody:someView{iPhoneNumberField("Phone", text: $text)}}
  1. Customize your iPhoneNumberField

Examples

Flags 🇦🇶

Show the flag, and make it selectable, so your users can find their region.

import SwiftUI
import iPhoneNumberField
structContentView:View{@Statevartext=""varbody:someView{iPhoneNumberField(text: $text).flagHidden(false).flagSelectable(true).font(UIFont(size:30, weight:.bold, design:.rounded)).padding()}}


Focus and unfocus 🔍

Use iPhoneNumberField's optional binding and iTextField to programmatically change text field.

import SwiftUI
import iTextField
import iPhoneNumberField
structContentView:View{@StatevarnameText=""@StatevarphoneText=""@StatevarphoneEditing=falsevarbody:someView{VStack{iTextField("Name", text: $nameText).font(UIFont(size:24, weight:.light, design:.monospaced)).padding().onReturn{ phoneEditing =true}iPhoneNumberField("Phone", text: $phoneText, isEditing: $phoneEditing).font(UIFont(size:24, weight:.light, design:.monospaced)).padding()}}}



Custom style 🎀

Use our modifiers to create a fully customized field.

import SwiftUI
import iPhoneNumberField
structContentView:View{@Statevartext:String=""@StatevarisEditing:Bool=falsevarbody:someView{iPhoneNumberField("(000) 000-0000", text: $text, isEditing: $isEditing).flagHidden(false).flagSelectable(true).font(UIFont(size:30, weight:.light, design:.monospaced)).maximumDigits(10).foregroundColor(Color.pink).clearButtonMode(.whileEditing).onClear{ _ in isEditing.toggle()}.accentColor(Color.orange).padding().background(Color.white).cornerRadius(10).shadow(color: isEditing ?.lightGray :.white, radius:10).padding()}}



Customize

iPhoneNumberField takes 2 required parameters: 1️⃣ a String placeholder, and 2️⃣ a binding to a phone number string. All customizations are built into our modifiers.

Example: Customize the text field style, and call a closure when editing ends.

iPhoneNumberField("", text: $text).accentColor(Color.green).clearsOnBeginEditing(true).clearButtonMode(.always).onEditingEnded{print("DONE ✅")}

Use our exhaustive input list to customize your view.

ModifierDescription
🔠.font(_:)Modifies the text field’s font from a UIFont object.
🎨.foregroundColor(_:)Modifies the text color of the text field.
🖍.accentColor(_:)Modifies the cursor color while typing on the text field.
🌈.placeholderColor(_:)Modifies the entireplaceholder color of the text field.
🖍.numberPlaceholderColor(_:)Modifies solely the phone number placeholder color of the text field – without the country code.
🐠.countryCodePlaceholderColor(_:)Modifies solely the country code placeholder color of the text field – without the phone number.
↔️.multilineTextAlignment(_:)Modifies the text alignment of a text field.
☎️.textContentType(_:)Modifies the content type of a text field for implied formatting.
▶️.clearsOnEditingBegan(_:)Modifies the clear-on-begin-editing setting of a text field.
👆.clearsOnInsert(_:)Modifies the clear-on-insertion setting of a text field.
.clearButtonMode(_:)Modifies whether and when the text field clear button appears on the view.
☑️.textFieldStyle(_:)Modifies the style of the text field to one of Apple's three pre-designed styles.
🔟.maximumDigits(_:)Modifies the maximum number of digits the text field allows.
🇦🇶.flagHidden(_:)Modifies whether the text field hides the country flag on the left 🇸🇪🇹🇼🇨🇬.
🇸🇮.flagSelectable(_:)Modifies whether the flag is selectable.
.prefixHidden(_:)Modifies whether the country code prefix should be hidden. Note: prefix will only be shown if using the default placeholder (placeholder = nil).
📞.formatted(_:)Modifies whether the binding you pass as the text parameter gets formatted.
.disabled(_:)Modifies whether the text field is disabled.
▶️.onEditingBegan(perform: { code })Modifies the function called when text editing begins.
💬.onNumberChange(perform: { code })Modifies the function called when the user makes any changes to the text in the text field.
💬.onEdit(perform: { code })Modifies the function called when the user makes any changes to the text in the text field.
🔚.onEditingEnded(perform: ({ code })Modifies the function called when text editing ends.
🔘.onClear(perform: { code })Modifies the function called when the user clears the text field.
↪️.onReturn(perfom: { code })Modifies the function called when the user presses return.
🏳️.defaultRegion(_:)Receives a country string and selects the default phone format.

Features

Features
☎️Validate, normalize and extract the elements of any phone number string.
🏁Fast. 1000 parses -> ~0.4 seconds.
📚Best-in-class metadata from Google's libPhoneNumber project.
🏆Fully tested to match the accuracy of Google's JavaScript implementation of libPhoneNumber.
📱Built for iOS. Automatically grabs the default region code from the phone.
📝Editable (!) AsYouType formatter for UITextField.
🇺🇸Convert country codes to country names and vice versa
⚙️Access to all native UITextField configurations
🔍Searchable and customizable country code and name list
Many more features to discover

Install

You can use the Swift package manager to install iPhoneNumberField. Find Xcode SPM instructions here

dependencies: [
.package(url: "https://github.com/MojtabaHs/iPhoneNumberField.git", .upToNextMinor(from: "0.10.0"))
]

🌟 Become a Paid Subscriber

This library is under the MIT license and completely FREE. Anyone can use it anywhere and any contribution is wellcomed.

In addition, you can show your support and become My sponsor. By supporting me, you will gain¹:

  • Tickets for code level support in any project you want (not just this one)
  • Access me through my socials and we can discuss technologies together.
  • Discounts and early access to my premium products.
  • Early access to updates and bug fixes.
  • We can even discuss your project entirely and build it together 💪🏻.

Remember that it is my pleasure to be a part of the community and try my best to deliver my experience to anyone who needs it.

¹ Paid program options are related to the chosen level.

About

Elegant SwiftUI phone number textField.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

iPhoneNumberField ☎️

Format phone numbers as they're typed—entirely in SwiftUI. 📱

Get Started | Examples | Customize | Features | Install | Pricing

CI


And it's as easy as

iPhoneNumberField("Phone", text: $text)

CI

Get Started

  1. InstalliPhoneNumberField.

  2. Add iPhoneNumberField to your project.

import SwiftUI
import iPhoneNumberField
structContentView:View{@Statevartext=""varbody:someView{iPhoneNumberField("Phone", text: $text)}}
  1. Customize your iPhoneNumberField

Examples

Flags 🇦🇶

Show the flag, and make it selectable, so your users can find their region.

import SwiftUI
import iPhoneNumberField
structContentView:View{@Statevartext=""varbody:someView{iPhoneNumberField(text: $text).flagHidden(false).flagSelectable(true).font(UIFont(size:30, weight:.bold, design:.rounded)).padding()}}


Focus and unfocus 🔍

Use iPhoneNumberField's optional binding and iTextField to programmatically change text field.

import SwiftUI
import iTextField
import iPhoneNumberField
structContentView:View{@StatevarnameText=""@StatevarphoneText=""@StatevarphoneEditing=falsevarbody:someView{VStack{iTextField("Name", text: $nameText).font(UIFont(size:24, weight:.light, design:.monospaced)).padding().onReturn{ phoneEditing =true}iPhoneNumberField("Phone", text: $phoneText, isEditing: $phoneEditing).font(UIFont(size:24, weight:.light, design:.monospaced)).padding()}}}



Custom style 🎀

Use our modifiers to create a fully customized field.

import SwiftUI
import iPhoneNumberField
structContentView:View{@Statevartext:String=""@StatevarisEditing:Bool=falsevarbody:someView{iPhoneNumberField("(000) 000-0000", text: $text, isEditing: $isEditing).flagHidden(false).flagSelectable(true).font(UIFont(size:30, weight:.light, design:.monospaced)).maximumDigits(10).foregroundColor(Color.pink).clearButtonMode(.whileEditing).onClear{ _ in isEditing.toggle()}.accentColor(Color.orange).padding().background(Color.white).cornerRadius(10).shadow(color: isEditing ?.lightGray :.white, radius:10).padding()}}



Customize

iPhoneNumberField takes 2 required parameters: 1️⃣ a String placeholder, and 2️⃣ a binding to a phone number string. All customizations are built into our modifiers.

Example: Customize the text field style, and call a closure when editing ends.

iPhoneNumberField("", text: $text).accentColor(Color.green).clearsOnBeginEditing(true).clearButtonMode(.always).onEditingEnded{print("DONE ✅")}

Use our exhaustive input list to customize your view.

ModifierDescription
🔠.font(_:)Modifies the text field’s font from a UIFont object.
🎨.foregroundColor(_:)Modifies the text color of the text field.
🖍.accentColor(_:)Modifies the cursor color while typing on the text field.
🌈.placeholderColor(_:)Modifies the entireplaceholder color of the text field.
🖍.numberPlaceholderColor(_:)Modifies solely the phone number placeholder color of the text field – without the country code.
🐠.countryCodePlaceholderColor(_:)Modifies solely the country code placeholder color of the text field – without the phone number.
↔️.multilineTextAlignment(_:)Modifies the text alignment of a text field.
☎️.textContentType(_:)Modifies the content type of a text field for implied formatting.
▶️.clearsOnEditingBegan(_:)Modifies the clear-on-begin-editing setting of a text field.
👆.clearsOnInsert(_:)Modifies the clear-on-insertion setting of a text field.
.clearButtonMode(_:)Modifies whether and when the text field clear button appears on the view.
☑️.textFieldStyle(_:)Modifies the style of the text field to one of Apple's three pre-designed styles.
🔟.maximumDigits(_:)Modifies the maximum number of digits the text field allows.
🇦🇶.flagHidden(_:)Modifies whether the text field hides the country flag on the left 🇸🇪🇹🇼🇨🇬.
🇸🇮.flagSelectable(_:)Modifies whether the flag is selectable.
.prefixHidden(_:)Modifies whether the country code prefix should be hidden. Note: prefix will only be shown if using the default placeholder (placeholder = nil).
📞.formatted(_:)Modifies whether the binding you pass as the text parameter gets formatted.
.disabled(_:)Modifies whether the text field is disabled.
▶️.onEditingBegan(perform: { code })Modifies the function called when text editing begins.
💬.onNumberChange(perform: { code })Modifies the function called when the user makes any changes to the text in the text field.
💬.onEdit(perform: { code })Modifies the function called when the user makes any changes to the text in the text field.
🔚.onEditingEnded(perform: ({ code })Modifies the function called when text editing ends.
🔘.onClear(perform: { code })Modifies the function called when the user clears the text field.
↪️.onReturn(perfom: { code })Modifies the function called when the user presses return.
🏳️.defaultRegion(_:)Receives a country string and selects the default phone format.

Features

Features
☎️Validate, normalize and extract the elements of any phone number string.
🏁Fast. 1000 parses -> ~0.4 seconds.
📚Best-in-class metadata from Google's libPhoneNumber project.
🏆Fully tested to match the accuracy of Google's JavaScript implementation of libPhoneNumber.
📱Built for iOS. Automatically grabs the default region code from the phone.
📝Editable (!) AsYouType formatter for UITextField.
🇺🇸Convert country codes to country names and vice versa
⚙️Access to all native UITextField configurations
🔍Searchable and customizable country code and name list
Many more features to discover

Install

You can use the Swift package manager to install iPhoneNumberField. Find Xcode SPM instructions here

dependencies: [
.package(url: "https://github.com/MojtabaHs/iPhoneNumberField.git", .upToNextMinor(from: "0.10.0"))
]

🌟 Become a Paid Subscriber

This library is under the MIT license and completely FREE. Anyone can use it anywhere and any contribution is wellcomed.

In addition, you can show your support and become My sponsor. By supporting me, you will gain¹:

  • Tickets for code level support in any project you want (not just this one)
  • Access me through my socials and we can discuss technologies together.
  • Discounts and early access to my premium products.
  • Early access to updates and bug fixes.
  • We can even discuss your project entirely and build it together 💪🏻.

Remember that it is my pleasure to be a part of the community and try my best to deliver my experience to anyone who needs it.

¹ Paid program options are related to the chosen level.

About

Elegant SwiftUI phone number textField.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

iPhoneNumberField ☎️

Format phone numbers as they're typed—entirely in SwiftUI. 📱

Get Started | Examples | Customize | Features | Install | Pricing

CI


And it's as easy as

iPhoneNumberField("Phone", text: $text)

CI

Get Started

  1. InstalliPhoneNumberField.

  2. Add iPhoneNumberField to your project.

import SwiftUI
import iPhoneNumberField
structContentView:View{@Statevartext=""varbody:someView{iPhoneNumberField("Phone", text: $text)}}
  1. Customize your iPhoneNumberField

Examples

Flags 🇦🇶

Show the flag, and make it selectable, so your users can find their region.

import SwiftUI
import iPhoneNumberField
structContentView:View{@Statevartext=""varbody:someView{iPhoneNumberField(text: $text).flagHidden(false).flagSelectable(true).font(UIFont(size:30, weight:.bold, design:.rounded)).padding()}}


Focus and unfocus 🔍

Use iPhoneNumberField's optional binding and iTextField to programmatically change text field.

import SwiftUI
import iTextField
import iPhoneNumberField
structContentView:View{@StatevarnameText=""@StatevarphoneText=""@StatevarphoneEditing=falsevarbody:someView{VStack{iTextField("Name", text: $nameText).font(UIFont(size:24, weight:.light, design:.monospaced)).padding().onReturn{ phoneEditing =true}iPhoneNumberField("Phone", text: $phoneText, isEditing: $phoneEditing).font(UIFont(size:24, weight:.light, design:.monospaced)).padding()}}}



Custom style 🎀

Use our modifiers to create a fully customized field.

import SwiftUI
import iPhoneNumberField
structContentView:View{@Statevartext:String=""@StatevarisEditing:Bool=falsevarbody:someView{iPhoneNumberField("(000) 000-0000", text: $text, isEditing: $isEditing).flagHidden(false).flagSelectable(true).font(UIFont(size:30, weight:.light, design:.monospaced)).maximumDigits(10).foregroundColor(Color.pink).clearButtonMode(.whileEditing).onClear{ _ in isEditing.toggle()}.accentColor(Color.orange).padding().background(Color.white).cornerRadius(10).shadow(color: isEditing ?.lightGray :.white, radius:10).padding()}}



Customize

iPhoneNumberField takes 2 required parameters: 1️⃣ a String placeholder, and 2️⃣ a binding to a phone number string. All customizations are built into our modifiers.

Example: Customize the text field style, and call a closure when editing ends.

iPhoneNumberField("", text: $text).accentColor(Color.green).clearsOnBeginEditing(true).clearButtonMode(.always).onEditingEnded{print("DONE ✅")}

Use our exhaustive input list to customize your view.

ModifierDescription
🔠.font(_:)Modifies the text field’s font from a UIFont object.
🎨.foregroundColor(_:)Modifies the text color of the text field.
🖍.accentColor(_:)Modifies the cursor color while typing on the text field.
🌈.placeholderColor(_:)Modifies the entireplaceholder color of the text field.
🖍.numberPlaceholderColor(_:)Modifies solely the phone number placeholder color of the text field – without the country code.
🐠.countryCodePlaceholderColor(_:)Modifies solely the country code placeholder color of the text field – without the phone number.
↔️.multilineTextAlignment(_:)Modifies the text alignment of a text field.
☎️.textContentType(_:)Modifies the content type of a text field for implied formatting.
▶️.clearsOnEditingBegan(_:)Modifies the clear-on-begin-editing setting of a text field.
👆.clearsOnInsert(_:)Modifies the clear-on-insertion setting of a text field.
.clearButtonMode(_:)Modifies whether and when the text field clear button appears on the view.
☑️.textFieldStyle(_:)Modifies the style of the text field to one of Apple's three pre-designed styles.
🔟.maximumDigits(_:)Modifies the maximum number of digits the text field allows.
🇦🇶.flagHidden(_:)Modifies whether the text field hides the country flag on the left 🇸🇪🇹🇼🇨🇬.
🇸🇮.flagSelectable(_:)Modifies whether the flag is selectable.
.prefixHidden(_:)Modifies whether the country code prefix should be hidden. Note: prefix will only be shown if using the default placeholder (placeholder = nil).
📞.formatted(_:)Modifies whether the binding you pass as the text parameter gets formatted.
.disabled(_:)Modifies whether the text field is disabled.
▶️.onEditingBegan(perform: { code })Modifies the function called when text editing begins.
💬.onNumberChange(perform: { code })Modifies the function called when the user makes any changes to the text in the text field.
💬.onEdit(perform: { code })Modifies the function called when the user makes any changes to the text in the text field.
🔚.onEditingEnded(perform: ({ code })Modifies the function called when text editing ends.
🔘.onClear(perform: { code })Modifies the function called when the user clears the text field.
↪️.onReturn(perfom: { code })Modifies the function called when the user presses return.
🏳️.defaultRegion(_:)Receives a country string and selects the default phone format.

Features

Features
☎️Validate, normalize and extract the elements of any phone number string.
🏁Fast. 1000 parses -> ~0.4 seconds.
📚Best-in-class metadata from Google's libPhoneNumber project.
🏆Fully tested to match the accuracy of Google's JavaScript implementation of libPhoneNumber.
📱Built for iOS. Automatically grabs the default region code from the phone.
📝Editable (!) AsYouType formatter for UITextField.
🇺🇸Convert country codes to country names and vice versa
⚙️Access to all native UITextField configurations
🔍Searchable and customizable country code and name list
Many more features to discover

Install

You can use the Swift package manager to install iPhoneNumberField. Find Xcode SPM instructions here

dependencies: [
.package(url: "https://github.com/MojtabaHs/iPhoneNumberField.git", .upToNextMinor(from: "0.10.0"))
]

🌟 Become a Paid Subscriber

This library is under the MIT license and completely FREE. Anyone can use it anywhere and any contribution is wellcomed.

In addition, you can show your support and become My sponsor. By supporting me, you will gain¹:

  • Tickets for code level support in any project you want (not just this one)
  • Access me through my socials and we can discuss technologies together.
  • Discounts and early access to my premium products.
  • Early access to updates and bug fixes.
  • We can even discuss your project entirely and build it together 💪🏻.

Remember that it is my pleasure to be a part of the community and try my best to deliver my experience to anyone who needs it.

¹ Paid program options are related to the chosen level.

About

Elegant SwiftUI phone number textField.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

iPhoneNumberField ☎️

Format phone numbers as they're typed—entirely in SwiftUI. 📱

Get Started | Examples | Customize | Features | Install | Pricing

CI


And it's as easy as

iPhoneNumberField("Phone", text: $text)

CI

Get Started

  1. InstalliPhoneNumberField.

  2. Add iPhoneNumberField to your project.

import SwiftUI
import iPhoneNumberField
structContentView:View{@Statevartext=""varbody:someView{iPhoneNumberField("Phone", text: $text)}}
  1. Customize your iPhoneNumberField

Examples

Flags 🇦🇶

Show the flag, and make it selectable, so your users can find their region.

import SwiftUI
import iPhoneNumberField
structContentView:View{@Statevartext=""varbody:someView{iPhoneNumberField(text: $text).flagHidden(false).flagSelectable(true).font(UIFont(size:30, weight:.bold, design:.rounded)).padding()}}


Focus and unfocus 🔍

Use iPhoneNumberField's optional binding and iTextField to programmatically change text field.

import SwiftUI
import iTextField
import iPhoneNumberField
structContentView:View{@StatevarnameText=""@StatevarphoneText=""@StatevarphoneEditing=falsevarbody:someView{VStack{iTextField("Name", text: $nameText).font(UIFont(size:24, weight:.light, design:.monospaced)).padding().onReturn{ phoneEditing =true}iPhoneNumberField("Phone", text: $phoneText, isEditing: $phoneEditing).font(UIFont(size:24, weight:.light, design:.monospaced)).padding()}}}



Custom style 🎀

Use our modifiers to create a fully customized field.

import SwiftUI
import iPhoneNumberField
structContentView:View{@Statevartext:String=""@StatevarisEditing:Bool=falsevarbody:someView{iPhoneNumberField("(000) 000-0000", text: $text, isEditing: $isEditing).flagHidden(false).flagSelectable(true).font(UIFont(size:30, weight:.light, design:.monospaced)).maximumDigits(10).foregroundColor(Color.pink).clearButtonMode(.whileEditing).onClear{ _ in isEditing.toggle()}.accentColor(Color.orange).padding().background(Color.white).cornerRadius(10).shadow(color: isEditing ?.lightGray :.white, radius:10).padding()}}



Customize

iPhoneNumberField takes 2 required parameters: 1️⃣ a String placeholder, and 2️⃣ a binding to a phone number string. All customizations are built into our modifiers.

Example: Customize the text field style, and call a closure when editing ends.

iPhoneNumberField("", text: $text).accentColor(Color.green).clearsOnBeginEditing(true).clearButtonMode(.always).onEditingEnded{print("DONE ✅")}

Use our exhaustive input list to customize your view.

ModifierDescription
🔠.font(_:)Modifies the text field’s font from a UIFont object.
🎨.foregroundColor(_:)Modifies the text color of the text field.
🖍.accentColor(_:)Modifies the cursor color while typing on the text field.
🌈.placeholderColor(_:)Modifies the entireplaceholder color of the text field.
🖍.numberPlaceholderColor(_:)Modifies solely the phone number placeholder color of the text field – without the country code.
🐠.countryCodePlaceholderColor(_:)Modifies solely the country code placeholder color of the text field – without the phone number.
↔️.multilineTextAlignment(_:)Modifies the text alignment of a text field.
☎️.textContentType(_:)Modifies the content type of a text field for implied formatting.
▶️.clearsOnEditingBegan(_:)Modifies the clear-on-begin-editing setting of a text field.
👆.clearsOnInsert(_:)Modifies the clear-on-insertion setting of a text field.
.clearButtonMode(_:)Modifies whether and when the text field clear button appears on the view.
☑️.textFieldStyle(_:)Modifies the style of the text field to one of Apple's three pre-designed styles.
🔟.maximumDigits(_:)Modifies the maximum number of digits the text field allows.
🇦🇶.flagHidden(_:)Modifies whether the text field hides the country flag on the left 🇸🇪🇹🇼🇨🇬.
🇸🇮.flagSelectable(_:)Modifies whether the flag is selectable.
.prefixHidden(_:)Modifies whether the country code prefix should be hidden. Note: prefix will only be shown if using the default placeholder (placeholder = nil).
📞.formatted(_:)Modifies whether the binding you pass as the text parameter gets formatted.
.disabled(_:)Modifies whether the text field is disabled.
▶️.onEditingBegan(perform: { code })Modifies the function called when text editing begins.
💬.onNumberChange(perform: { code })Modifies the function called when the user makes any changes to the text in the text field.
💬.onEdit(perform: { code })Modifies the function called when the user makes any changes to the text in the text field.
🔚.onEditingEnded(perform: ({ code })Modifies the function called when text editing ends.
🔘.onClear(perform: { code })Modifies the function called when the user clears the text field.
↪️.onReturn(perfom: { code })Modifies the function called when the user presses return.
🏳️.defaultRegion(_:)Receives a country string and selects the default phone format.

Features

Features
☎️Validate, normalize and extract the elements of any phone number string.
🏁Fast. 1000 parses -> ~0.4 seconds.
📚Best-in-class metadata from Google's libPhoneNumber project.
🏆Fully tested to match the accuracy of Google's JavaScript implementation of libPhoneNumber.
📱Built for iOS. Automatically grabs the default region code from the phone.
📝Editable (!) AsYouType formatter for UITextField.
🇺🇸Convert country codes to country names and vice versa
⚙️Access to all native UITextField configurations
🔍Searchable and customizable country code and name list
Many more features to discover

Install

You can use the Swift package manager to install iPhoneNumberField. Find Xcode SPM instructions here

dependencies: [
.package(url: "https://github.com/MojtabaHs/iPhoneNumberField.git", .upToNextMinor(from: "0.10.0"))
]

🌟 Become a Paid Subscriber

This library is under the MIT license and completely FREE. Anyone can use it anywhere and any contribution is wellcomed.

In addition, you can show your support and become My sponsor. By supporting me, you will gain¹:

  • Tickets for code level support in any project you want (not just this one)
  • Access me through my socials and we can discuss technologies together.
  • Discounts and early access to my premium products.
  • Early access to updates and bug fixes.
  • We can even discuss your project entirely and build it together 💪🏻.

Remember that it is my pleasure to be a part of the community and try my best to deliver my experience to anyone who needs it.

¹ Paid program options are related to the chosen level.

About

Elegant SwiftUI phone number textField.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

iPhoneNumberField ☎️

Format phone numbers as they're typed—entirely in SwiftUI. 📱

Get Started | Examples | Customize | Features | Install | Pricing

CI


And it's as easy as

iPhoneNumberField("Phone", text: $text)

CI

Get Started

  1. InstalliPhoneNumberField.

  2. Add iPhoneNumberField to your project.

import SwiftUI
import iPhoneNumberField
structContentView:View{@Statevartext=""varbody:someView{iPhoneNumberField("Phone", text: $text)}}
  1. Customize your iPhoneNumberField

Examples

Flags 🇦🇶

Show the flag, and make it selectable, so your users can find their region.

import SwiftUI
import iPhoneNumberField
structContentView:View{@Statevartext=""varbody:someView{iPhoneNumberField(text: $text).flagHidden(false).flagSelectable(true).font(UIFont(size:30, weight:.bold, design:.rounded)).padding()}}


Focus and unfocus 🔍

Use iPhoneNumberField's optional binding and iTextField to programmatically change text field.

import SwiftUI
import iTextField
import iPhoneNumberField
structContentView:View{@StatevarnameText=""@StatevarphoneText=""@StatevarphoneEditing=falsevarbody:someView{VStack{iTextField("Name", text: $nameText).font(UIFont(size:24, weight:.light, design:.monospaced)).padding().onReturn{ phoneEditing =true}iPhoneNumberField("Phone", text: $phoneText, isEditing: $phoneEditing).font(UIFont(size:24, weight:.light, design:.monospaced)).padding()}}}



Custom style 🎀

Use our modifiers to create a fully customized field.

import SwiftUI
import iPhoneNumberField
structContentView:View{@Statevartext:String=""@StatevarisEditing:Bool=falsevarbody:someView{iPhoneNumberField("(000) 000-0000", text: $text, isEditing: $isEditing).flagHidden(false).flagSelectable(true).font(UIFont(size:30, weight:.light, design:.monospaced)).maximumDigits(10).foregroundColor(Color.pink).clearButtonMode(.whileEditing).onClear{ _ in isEditing.toggle()}.accentColor(Color.orange).padding().background(Color.white).cornerRadius(10).shadow(color: isEditing ?.lightGray :.white, radius:10).padding()}}



Customize

iPhoneNumberField takes 2 required parameters: 1️⃣ a String placeholder, and 2️⃣ a binding to a phone number string. All customizations are built into our modifiers.

Example: Customize the text field style, and call a closure when editing ends.

iPhoneNumberField("", text: $text).accentColor(Color.green).clearsOnBeginEditing(true).clearButtonMode(.always).onEditingEnded{print("DONE ✅")}

Use our exhaustive input list to customize your view.

ModifierDescription
🔠.font(_:)Modifies the text field’s font from a UIFont object.
🎨.foregroundColor(_:)Modifies the text color of the text field.
🖍.accentColor(_:)Modifies the cursor color while typing on the text field.
🌈.placeholderColor(_:)Modifies the entireplaceholder color of the text field.
🖍.numberPlaceholderColor(_:)Modifies solely the phone number placeholder color of the text field – without the country code.
🐠.countryCodePlaceholderColor(_:)Modifies solely the country code placeholder color of the text field – without the phone number.
↔️.multilineTextAlignment(_:)Modifies the text alignment of a text field.
☎️.textContentType(_:)Modifies the content type of a text field for implied formatting.
▶️.clearsOnEditingBegan(_:)Modifies the clear-on-begin-editing setting of a text field.
👆.clearsOnInsert(_:)Modifies the clear-on-insertion setting of a text field.
.clearButtonMode(_:)Modifies whether and when the text field clear button appears on the view.
☑️.textFieldStyle(_:)Modifies the style of the text field to one of Apple's three pre-designed styles.
🔟.maximumDigits(_:)Modifies the maximum number of digits the text field allows.
🇦🇶.flagHidden(_:)Modifies whether the text field hides the country flag on the left 🇸🇪🇹🇼🇨🇬.
🇸🇮.flagSelectable(_:)Modifies whether the flag is selectable.
.prefixHidden(_:)Modifies whether the country code prefix should be hidden. Note: prefix will only be shown if using the default placeholder (placeholder = nil).
📞.formatted(_:)Modifies whether the binding you pass as the text parameter gets formatted.
.disabled(_:)Modifies whether the text field is disabled.
▶️.onEditingBegan(perform: { code })Modifies the function called when text editing begins.
💬.onNumberChange(perform: { code })Modifies the function called when the user makes any changes to the text in the text field.
💬.onEdit(perform: { code })Modifies the function called when the user makes any changes to the text in the text field.
🔚.onEditingEnded(perform: ({ code })Modifies the function called when text editing ends.
🔘.onClear(perform: { code })Modifies the function called when the user clears the text field.
↪️.onReturn(perfom: { code })Modifies the function called when the user presses return.
🏳️.defaultRegion(_:)Receives a country string and selects the default phone format.

Features

Features
☎️Validate, normalize and extract the elements of any phone number string.
🏁Fast. 1000 parses -> ~0.4 seconds.
📚Best-in-class metadata from Google's libPhoneNumber project.
🏆Fully tested to match the accuracy of Google's JavaScript implementation of libPhoneNumber.
📱Built for iOS. Automatically grabs the default region code from the phone.
📝Editable (!) AsYouType formatter for UITextField.
🇺🇸Convert country codes to country names and vice versa
⚙️Access to all native UITextField configurations
🔍Searchable and customizable country code and name list
Many more features to discover

Install

You can use the Swift package manager to install iPhoneNumberField. Find Xcode SPM instructions here

dependencies: [
.package(url: "https://github.com/MojtabaHs/iPhoneNumberField.git", .upToNextMinor(from: "0.10.0"))
]

🌟 Become a Paid Subscriber

This library is under the MIT license and completely FREE. Anyone can use it anywhere and any contribution is wellcomed.

In addition, you can show your support and become My sponsor. By supporting me, you will gain¹:

  • Tickets for code level support in any project you want (not just this one)
  • Access me through my socials and we can discuss technologies together.
  • Discounts and early access to my premium products.
  • Early access to updates and bug fixes.
  • We can even discuss your project entirely and build it together 💪🏻.

Remember that it is my pleasure to be a part of the community and try my best to deliver my experience to anyone who needs it.

¹ Paid program options are related to the chosen level.

About

Elegant SwiftUI phone number textField.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

iPhoneNumberField ☎️

Format phone numbers as they're typed—entirely in SwiftUI. 📱

Get Started | Examples | Customize | Features | Install | Pricing

CI


And it's as easy as

iPhoneNumberField("Phone", text: $text)

CI

Get Started

  1. InstalliPhoneNumberField.

  2. Add iPhoneNumberField to your project.

import SwiftUI
import iPhoneNumberField
structContentView:View{@Statevartext=""varbody:someView{iPhoneNumberField("Phone", text: $text)}}
  1. Customize your iPhoneNumberField

Examples

Flags 🇦🇶

Show the flag, and make it selectable, so your users can find their region.

import SwiftUI
import iPhoneNumberField
structContentView:View{@Statevartext=""varbody:someView{iPhoneNumberField(text: $text).flagHidden(false).flagSelectable(true).font(UIFont(size:30, weight:.bold, design:.rounded)).padding()}}


Focus and unfocus 🔍

Use iPhoneNumberField's optional binding and iTextField to programmatically change text field.

import SwiftUI
import iTextField
import iPhoneNumberField
structContentView:View{@StatevarnameText=""@StatevarphoneText=""@StatevarphoneEditing=falsevarbody:someView{VStack{iTextField("Name", text: $nameText).font(UIFont(size:24, weight:.light, design:.monospaced)).padding().onReturn{ phoneEditing =true}iPhoneNumberField("Phone", text: $phoneText, isEditing: $phoneEditing).font(UIFont(size:24, weight:.light, design:.monospaced)).padding()}}}



Custom style 🎀

Use our modifiers to create a fully customized field.

import SwiftUI
import iPhoneNumberField
structContentView:View{@Statevartext:String=""@StatevarisEditing:Bool=falsevarbody:someView{iPhoneNumberField("(000) 000-0000", text: $text, isEditing: $isEditing).flagHidden(false).flagSelectable(true).font(UIFont(size:30, weight:.light, design:.monospaced)).maximumDigits(10).foregroundColor(Color.pink).clearButtonMode(.whileEditing).onClear{ _ in isEditing.toggle()}.accentColor(Color.orange).padding().background(Color.white).cornerRadius(10).shadow(color: isEditing ?.lightGray :.white, radius:10).padding()}}



Customize

iPhoneNumberField takes 2 required parameters: 1️⃣ a String placeholder, and 2️⃣ a binding to a phone number string. All customizations are built into our modifiers.

Example: Customize the text field style, and call a closure when editing ends.

iPhoneNumberField("", text: $text).accentColor(Color.green).clearsOnBeginEditing(true).clearButtonMode(.always).onEditingEnded{print("DONE ✅")}

Use our exhaustive input list to customize your view.

ModifierDescription
🔠.font(_:)Modifies the text field’s font from a UIFont object.
🎨.foregroundColor(_:)Modifies the text color of the text field.
🖍.accentColor(_:)Modifies the cursor color while typing on the text field.
🌈.placeholderColor(_:)Modifies the entireplaceholder color of the text field.
🖍.numberPlaceholderColor(_:)Modifies solely the phone number placeholder color of the text field – without the country code.
🐠.countryCodePlaceholderColor(_:)Modifies solely the country code placeholder color of the text field – without the phone number.
↔️.multilineTextAlignment(_:)Modifies the text alignment of a text field.
☎️.textContentType(_:)Modifies the content type of a text field for implied formatting.
▶️.clearsOnEditingBegan(_:)Modifies the clear-on-begin-editing setting of a text field.
👆.clearsOnInsert(_:)Modifies the clear-on-insertion setting of a text field.
.clearButtonMode(_:)Modifies whether and when the text field clear button appears on the view.
☑️.textFieldStyle(_:)Modifies the style of the text field to one of Apple's three pre-designed styles.
🔟.maximumDigits(_:)Modifies the maximum number of digits the text field allows.
🇦🇶.flagHidden(_:)Modifies whether the text field hides the country flag on the left 🇸🇪🇹🇼🇨🇬.
🇸🇮.flagSelectable(_:)Modifies whether the flag is selectable.
.prefixHidden(_:)Modifies whether the country code prefix should be hidden. Note: prefix will only be shown if using the default placeholder (placeholder = nil).
📞.formatted(_:)Modifies whether the binding you pass as the text parameter gets formatted.
.disabled(_:)Modifies whether the text field is disabled.
▶️.onEditingBegan(perform: { code })Modifies the function called when text editing begins.
💬.onNumberChange(perform: { code })Modifies the function called when the user makes any changes to the text in the text field.
💬.onEdit(perform: { code })Modifies the function called when the user makes any changes to the text in the text field.
🔚.onEditingEnded(perform: ({ code })Modifies the function called when text editing ends.
🔘.onClear(perform: { code })Modifies the function called when the user clears the text field.
↪️.onReturn(perfom: { code })Modifies the function called when the user presses return.
🏳️.defaultRegion(_:)Receives a country string and selects the default phone format.

Features

Features
☎️Validate, normalize and extract the elements of any phone number string.
🏁Fast. 1000 parses -> ~0.4 seconds.
📚Best-in-class metadata from Google's libPhoneNumber project.
🏆Fully tested to match the accuracy of Google's JavaScript implementation of libPhoneNumber.
📱Built for iOS. Automatically grabs the default region code from the phone.
📝Editable (!) AsYouType formatter for UITextField.
🇺🇸Convert country codes to country names and vice versa
⚙️Access to all native UITextField configurations
🔍Searchable and customizable country code and name list
Many more features to discover

Install

You can use the Swift package manager to install iPhoneNumberField. Find Xcode SPM instructions here

dependencies: [
.package(url: "https://github.com/MojtabaHs/iPhoneNumberField.git", .upToNextMinor(from: "0.10.0"))
]

🌟 Become a Paid Subscriber

This library is under the MIT license and completely FREE. Anyone can use it anywhere and any contribution is wellcomed.

In addition, you can show your support and become My sponsor. By supporting me, you will gain¹:

  • Tickets for code level support in any project you want (not just this one)
  • Access me through my socials and we can discuss technologies together.
  • Discounts and early access to my premium products.
  • Early access to updates and bug fixes.
  • We can even discuss your project entirely and build it together 💪🏻.

Remember that it is my pleasure to be a part of the community and try my best to deliver my experience to anyone who needs it.

¹ Paid program options are related to the chosen level.

About

Elegant SwiftUI phone number textField.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

iPhoneNumberField ☎️

Format phone numbers as they're typed—entirely in SwiftUI. 📱

Get Started | Examples | Customize | Features | Install | Pricing

CI


And it's as easy as

iPhoneNumberField("Phone", text: $text)

CI

Get Started

  1. InstalliPhoneNumberField.

  2. Add iPhoneNumberField to your project.

import SwiftUI
import iPhoneNumberField
structContentView:View{@Statevartext=""varbody:someView{iPhoneNumberField("Phone", text: $text)}}
  1. Customize your iPhoneNumberField

Examples

Flags 🇦🇶

Show the flag, and make it selectable, so your users can find their region.

import SwiftUI
import iPhoneNumberField
structContentView:View{@Statevartext=""varbody:someView{iPhoneNumberField(text: $text).flagHidden(false).flagSelectable(true).font(UIFont(size:30, weight:.bold, design:.rounded)).padding()}}


Focus and unfocus 🔍

Use iPhoneNumberField's optional binding and iTextField to programmatically change text field.

import SwiftUI
import iTextField
import iPhoneNumberField
structContentView:View{@StatevarnameText=""@StatevarphoneText=""@StatevarphoneEditing=falsevarbody:someView{VStack{iTextField("Name", text: $nameText).font(UIFont(size:24, weight:.light, design:.monospaced)).padding().onReturn{ phoneEditing =true}iPhoneNumberField("Phone", text: $phoneText, isEditing: $phoneEditing).font(UIFont(size:24, weight:.light, design:.monospaced)).padding()}}}



Custom style 🎀

Use our modifiers to create a fully customized field.

import SwiftUI
import iPhoneNumberField
structContentView:View{@Statevartext:String=""@StatevarisEditing:Bool=falsevarbody:someView{iPhoneNumberField("(000) 000-0000", text: $text, isEditing: $isEditing).flagHidden(false).flagSelectable(true).font(UIFont(size:30, weight:.light, design:.monospaced)).maximumDigits(10).foregroundColor(Color.pink).clearButtonMode(.whileEditing).onClear{ _ in isEditing.toggle()}.accentColor(Color.orange).padding().background(Color.white).cornerRadius(10).shadow(color: isEditing ?.lightGray :.white, radius:10).padding()}}



Customize

iPhoneNumberField takes 2 required parameters: 1️⃣ a String placeholder, and 2️⃣ a binding to a phone number string. All customizations are built into our modifiers.

Example: Customize the text field style, and call a closure when editing ends.

iPhoneNumberField("", text: $text).accentColor(Color.green).clearsOnBeginEditing(true).clearButtonMode(.always).onEditingEnded{print("DONE ✅")}

Use our exhaustive input list to customize your view.

ModifierDescription
🔠.font(_:)Modifies the text field’s font from a UIFont object.
🎨.foregroundColor(_:)Modifies the text color of the text field.
🖍.accentColor(_:)Modifies the cursor color while typing on the text field.
🌈.placeholderColor(_:)Modifies the entireplaceholder color of the text field.
🖍.numberPlaceholderColor(_:)Modifies solely the phone number placeholder color of the text field – without the country code.
🐠.countryCodePlaceholderColor(_:)Modifies solely the country code placeholder color of the text field – without the phone number.
↔️.multilineTextAlignment(_:)Modifies the text alignment of a text field.
☎️.textContentType(_:)Modifies the content type of a text field for implied formatting.
▶️.clearsOnEditingBegan(_:)Modifies the clear-on-begin-editing setting of a text field.
👆.clearsOnInsert(_:)Modifies the clear-on-insertion setting of a text field.
.clearButtonMode(_:)Modifies whether and when the text field clear button appears on the view.
☑️.textFieldStyle(_:)Modifies the style of the text field to one of Apple's three pre-designed styles.
🔟.maximumDigits(_:)Modifies the maximum number of digits the text field allows.
🇦🇶.flagHidden(_:)Modifies whether the text field hides the country flag on the left 🇸🇪🇹🇼🇨🇬.
🇸🇮.flagSelectable(_:)Modifies whether the flag is selectable.
.prefixHidden(_:)Modifies whether the country code prefix should be hidden. Note: prefix will only be shown if using the default placeholder (placeholder = nil).
📞.formatted(_:)Modifies whether the binding you pass as the text parameter gets formatted.
.disabled(_:)Modifies whether the text field is disabled.
▶️.onEditingBegan(perform: { code })Modifies the function called when text editing begins.
💬.onNumberChange(perform: { code })Modifies the function called when the user makes any changes to the text in the text field.
💬.onEdit(perform: { code })Modifies the function called when the user makes any changes to the text in the text field.
🔚.onEditingEnded(perform: ({ code })Modifies the function called when text editing ends.
🔘.onClear(perform: { code })Modifies the function called when the user clears the text field.
↪️.onReturn(perfom: { code })Modifies the function called when the user presses return.
🏳️.defaultRegion(_:)Receives a country string and selects the default phone format.

Features

Features
☎️Validate, normalize and extract the elements of any phone number string.
🏁Fast. 1000 parses -> ~0.4 seconds.
📚Best-in-class metadata from Google's libPhoneNumber project.
🏆Fully tested to match the accuracy of Google's JavaScript implementation of libPhoneNumber.
📱Built for iOS. Automatically grabs the default region code from the phone.
📝Editable (!) AsYouType formatter for UITextField.
🇺🇸Convert country codes to country names and vice versa
⚙️Access to all native UITextField configurations
🔍Searchable and customizable country code and name list
Many more features to discover

Install

You can use the Swift package manager to install iPhoneNumberField. Find Xcode SPM instructions here

dependencies: [
.package(url: "https://github.com/MojtabaHs/iPhoneNumberField.git", .upToNextMinor(from: "0.10.0"))
]

🌟 Become a Paid Subscriber

This library is under the MIT license and completely FREE. Anyone can use it anywhere and any contribution is wellcomed.

In addition, you can show your support and become My sponsor. By supporting me, you will gain¹:

  • Tickets for code level support in any project you want (not just this one)
  • Access me through my socials and we can discuss technologies together.
  • Discounts and early access to my premium products.
  • Early access to updates and bug fixes.
  • We can even discuss your project entirely and build it together 💪🏻.

Remember that it is my pleasure to be a part of the community and try my best to deliver my experience to anyone who needs it.

¹ Paid program options are related to the chosen level.

About

Elegant SwiftUI phone number textField.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

iPhoneNumberField ☎️

Format phone numbers as they're typed—entirely in SwiftUI. 📱

Get Started | Examples | Customize | Features | Install | Pricing

CI


And it's as easy as

iPhoneNumberField("Phone", text: $text)

CI

Get Started

  1. InstalliPhoneNumberField.

  2. Add iPhoneNumberField to your project.

import SwiftUI
import iPhoneNumberField
structContentView:View{@Statevartext=""varbody:someView{iPhoneNumberField("Phone", text: $text)}}
  1. Customize your iPhoneNumberField

Examples

Flags 🇦🇶

Show the flag, and make it selectable, so your users can find their region.

import SwiftUI
import iPhoneNumberField
structContentView:View{@Statevartext=""varbody:someView{iPhoneNumberField(text: $text).flagHidden(false).flagSelectable(true).font(UIFont(size:30, weight:.bold, design:.rounded)).padding()}}


Focus and unfocus 🔍

Use iPhoneNumberField's optional binding and iTextField to programmatically change text field.

import SwiftUI
import iTextField
import iPhoneNumberField
structContentView:View{@StatevarnameText=""@StatevarphoneText=""@StatevarphoneEditing=falsevarbody:someView{VStack{iTextField("Name", text: $nameText).font(UIFont(size:24, weight:.light, design:.monospaced)).padding().onReturn{ phoneEditing =true}iPhoneNumberField("Phone", text: $phoneText, isEditing: $phoneEditing).font(UIFont(size:24, weight:.light, design:.monospaced)).padding()}}}



Custom style 🎀

Use our modifiers to create a fully customized field.

import SwiftUI
import iPhoneNumberField
structContentView:View{@Statevartext:String=""@StatevarisEditing:Bool=falsevarbody:someView{iPhoneNumberField("(000) 000-0000", text: $text, isEditing: $isEditing).flagHidden(false).flagSelectable(true).font(UIFont(size:30, weight:.light, design:.monospaced)).maximumDigits(10).foregroundColor(Color.pink).clearButtonMode(.whileEditing).onClear{ _ in isEditing.toggle()}.accentColor(Color.orange).padding().background(Color.white).cornerRadius(10).shadow(color: isEditing ?.lightGray :.white, radius:10).padding()}}



Customize

iPhoneNumberField takes 2 required parameters: 1️⃣ a String placeholder, and 2️⃣ a binding to a phone number string. All customizations are built into our modifiers.

Example: Customize the text field style, and call a closure when editing ends.

iPhoneNumberField("", text: $text).accentColor(Color.green).clearsOnBeginEditing(true).clearButtonMode(.always).onEditingEnded{print("DONE ✅")}

Use our exhaustive input list to customize your view.

ModifierDescription
🔠.font(_:)Modifies the text field’s font from a UIFont object.
🎨.foregroundColor(_:)Modifies the text color of the text field.
🖍.accentColor(_:)Modifies the cursor color while typing on the text field.
🌈.placeholderColor(_:)Modifies the entireplaceholder color of the text field.
🖍.numberPlaceholderColor(_:)Modifies solely the phone number placeholder color of the text field – without the country code.
🐠.countryCodePlaceholderColor(_:)Modifies solely the country code placeholder color of the text field – without the phone number.
↔️.multilineTextAlignment(_:)Modifies the text alignment of a text field.
☎️.textContentType(_:)Modifies the content type of a text field for implied formatting.
▶️.clearsOnEditingBegan(_:)Modifies the clear-on-begin-editing setting of a text field.
👆.clearsOnInsert(_:)Modifies the clear-on-insertion setting of a text field.
.clearButtonMode(_:)Modifies whether and when the text field clear button appears on the view.
☑️.textFieldStyle(_:)Modifies the style of the text field to one of Apple's three pre-designed styles.
🔟.maximumDigits(_:)Modifies the maximum number of digits the text field allows.
🇦🇶.flagHidden(_:)Modifies whether the text field hides the country flag on the left 🇸🇪🇹🇼🇨🇬.
🇸🇮.flagSelectable(_:)Modifies whether the flag is selectable.
.prefixHidden(_:)Modifies whether the country code prefix should be hidden. Note: prefix will only be shown if using the default placeholder (placeholder = nil).
📞.formatted(_:)Modifies whether the binding you pass as the text parameter gets formatted.
.disabled(_:)Modifies whether the text field is disabled.
▶️.onEditingBegan(perform: { code })Modifies the function called when text editing begins.
💬.onNumberChange(perform: { code })Modifies the function called when the user makes any changes to the text in the text field.
💬.onEdit(perform: { code })Modifies the function called when the user makes any changes to the text in the text field.
🔚.onEditingEnded(perform: ({ code })Modifies the function called when text editing ends.
🔘.onClear(perform: { code })Modifies the function called when the user clears the text field.
↪️.onReturn(perfom: { code })Modifies the function called when the user presses return.
🏳️.defaultRegion(_:)Receives a country string and selects the default phone format.

Features

Features
☎️Validate, normalize and extract the elements of any phone number string.
🏁Fast. 1000 parses -> ~0.4 seconds.
📚Best-in-class metadata from Google's libPhoneNumber project.
🏆Fully tested to match the accuracy of Google's JavaScript implementation of libPhoneNumber.
📱Built for iOS. Automatically grabs the default region code from the phone.
📝Editable (!) AsYouType formatter for UITextField.
🇺🇸Convert country codes to country names and vice versa
⚙️Access to all native UITextField configurations
🔍Searchable and customizable country code and name list
Many more features to discover

Install

You can use the Swift package manager to install iPhoneNumberField. Find Xcode SPM instructions here

dependencies: [
.package(url: "https://github.com/MojtabaHs/iPhoneNumberField.git", .upToNextMinor(from: "0.10.0"))
]

🌟 Become a Paid Subscriber

This library is under the MIT license and completely FREE. Anyone can use it anywhere and any contribution is wellcomed.

In addition, you can show your support and become My sponsor. By supporting me, you will gain¹:

  • Tickets for code level support in any project you want (not just this one)
  • Access me through my socials and we can discuss technologies together.
  • Discounts and early access to my premium products.
  • Early access to updates and bug fixes.
  • We can even discuss your project entirely and build it together 💪🏻.

Remember that it is my pleasure to be a part of the community and try my best to deliver my experience to anyone who needs it.

¹ Paid program options are related to the chosen level.

About

Elegant SwiftUI phone number textField.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages