在 swift 中屏蔽 textField
Mask textField in swift
如何在 swift 中为文本字段设置掩码?例如,一个 phone 文本字段,当用户键入它时显示为 phone 格式,如 objective-C:
中的代码
self.textField.mask = @"(##)####-####";
这样你就可以在 Swift.
中创建一个 telephone 面具
首先为字符串类型创建一个漂亮的扩展。下标获取索引处的字符,函数从 int!.
获取 String.Index 类型
extension String {
subscript (i: Int) -> String {
if countElements(self) > i {
return String(Array(self)[i])
}
return ""
}
func indexAt(theInt:Int)->String.Index {
return advance(self.startIndex, theInt)
}
}
这是调用 phone 号码输入字段中的文本的函数:
func returnMaskedPhoneField(thePhoneText:String)->String{
var returnString = thePhoneText
//Trims non-numerical characters
returnString = returnString.stringByTrimmingCharactersInSet(NSCharacterSet.decimalDigitCharacterSet().invertedSet)
//Removes all spaces
returnString = returnString.stringByReplacingOccurrencesOfString(" ", withString: "")
//Checks if we need to format a mobile number
if thePhoneText[1] == "4"{
if countElements(returnString) > 7 {
returnString = returnString.stringByReplacingCharactersInRange(Range<String.Index>(start: returnString.indexAt(7), end: returnString.indexAt(7)), withString: " ")
}
if countElements(returnString) > 4 {
returnString = returnString.stringByReplacingCharactersInRange(Range<String.Index>(start: returnString.indexAt(4), end: returnString.indexAt(4)), withString: " ")
}
}else {
if countElements(returnString) > 6 {
returnString = returnString.stringByReplacingCharactersInRange(Range<String.Index>(start: returnString.indexAt(6), end: returnString.indexAt(6)), withString: " ")
}
if countElements(returnString) > 2 {
returnString = returnString.stringByReplacingCharactersInRange(Range<String.Index>(start: returnString.indexAt(2), end: returnString.indexAt(2)), withString: " ")
}
}
return returnString
}
那么这里就是你实现函数的地方,把它放在你的 viewDidLoad
方法中:
aTextField.delegate = self
aTextField.addTarget(self, action: "validateTextFields:", forControlEvents: UIControlEvents.EditingChanged)
class 中的这个是你的 textfield
代表:
func validateTextFields(sender:AnyObject){
if let textField = sender as? UITextField {
if textField == aTextField {
if let currentCurserPosition = aTextField?.selectedTextRange {
var isEndOfString = false
let currentCurserPositionInteger = textField.offsetFromPosition(textField.beginningOfDocument, toPosition: currentCurserPosition.start)
if currentCurserPositionInteger == count(textField.text){
isEndOfString = true
}
aTextField?.text = returnMaskedPhoneField(textField.text)
if isEndOfString == false {
aTextField?.selectedTextRange = currentCurserPosition
}
}else {
aTextField?.text = returnMaskedPhoneField(textField.text)
}
}
}
}
它将像这样工作:
学分:
http://pjeremymalouf.com/creating-a-text-mask-in-swift/
如果你想使用自定义 textField
那么你可以使用 AKMaskField.
在哪里可以像这样找到 phone 的 textField
:
Swift 4 非常简单并且带有掩码最大文本字段长度和句柄返回 Space
//MARK: - text field masking
internal func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
//MARK:- If Delete button click
let char = string.cString(using: String.Encoding.utf8)!
let isBackSpace = strcmp(char, "\b")
if (isBackSpace == -92) && (textField.text?.count)! > 0 {
print("Backspace was pressed")
textField.text!.removeLast()
return false
}
if textField == txtworkphone
{
if (textField.text?.count)! == 3
{
textField.text = "(\(textField.text!)) " //There we are ading () and space two things
}
else if (textField.text?.count)! == 9
{
textField.text = "\(textField.text!)-" //there we are ading - in textfield
}
else if (textField.text?.count)! > 13
{
return false
}
}
}
Swift 4&&5 很简单Phone 数字掩码
您必须使用此代码作为文本字段委托。
func formattedNumber(number: String) -> String {
let cleanPhoneNumber = number.components(separatedBy: CharacterSet.decimalDigits.inverted).joined()
let mask = "## ### ###"
var result = ""
var index = cleanPhoneNumber.startIndex
for ch in mask! where index < cleanPhoneNumber.endIndex {
if ch == "#" {
result.append(cleanPhoneNumber[index])
index = cleanPhoneNumber.index(after: index)
} else {
result.append(ch)
}
}
return result
}
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
guard let text = textField.text else { return false }
let newString = (text as NSString).replacingCharacters(in: range, with: string)
textField.text = formattedNumber(number: newString)
return false
}
如何在 swift 中为文本字段设置掩码?例如,一个 phone 文本字段,当用户键入它时显示为 phone 格式,如 objective-C:
中的代码self.textField.mask = @"(##)####-####";
这样你就可以在 Swift.
中创建一个 telephone 面具首先为字符串类型创建一个漂亮的扩展。下标获取索引处的字符,函数从 int!.
获取 String.Index 类型extension String {
subscript (i: Int) -> String {
if countElements(self) > i {
return String(Array(self)[i])
}
return ""
}
func indexAt(theInt:Int)->String.Index {
return advance(self.startIndex, theInt)
}
}
这是调用 phone 号码输入字段中的文本的函数:
func returnMaskedPhoneField(thePhoneText:String)->String{
var returnString = thePhoneText
//Trims non-numerical characters
returnString = returnString.stringByTrimmingCharactersInSet(NSCharacterSet.decimalDigitCharacterSet().invertedSet)
//Removes all spaces
returnString = returnString.stringByReplacingOccurrencesOfString(" ", withString: "")
//Checks if we need to format a mobile number
if thePhoneText[1] == "4"{
if countElements(returnString) > 7 {
returnString = returnString.stringByReplacingCharactersInRange(Range<String.Index>(start: returnString.indexAt(7), end: returnString.indexAt(7)), withString: " ")
}
if countElements(returnString) > 4 {
returnString = returnString.stringByReplacingCharactersInRange(Range<String.Index>(start: returnString.indexAt(4), end: returnString.indexAt(4)), withString: " ")
}
}else {
if countElements(returnString) > 6 {
returnString = returnString.stringByReplacingCharactersInRange(Range<String.Index>(start: returnString.indexAt(6), end: returnString.indexAt(6)), withString: " ")
}
if countElements(returnString) > 2 {
returnString = returnString.stringByReplacingCharactersInRange(Range<String.Index>(start: returnString.indexAt(2), end: returnString.indexAt(2)), withString: " ")
}
}
return returnString
}
那么这里就是你实现函数的地方,把它放在你的 viewDidLoad
方法中:
aTextField.delegate = self
aTextField.addTarget(self, action: "validateTextFields:", forControlEvents: UIControlEvents.EditingChanged)
class 中的这个是你的 textfield
代表:
func validateTextFields(sender:AnyObject){
if let textField = sender as? UITextField {
if textField == aTextField {
if let currentCurserPosition = aTextField?.selectedTextRange {
var isEndOfString = false
let currentCurserPositionInteger = textField.offsetFromPosition(textField.beginningOfDocument, toPosition: currentCurserPosition.start)
if currentCurserPositionInteger == count(textField.text){
isEndOfString = true
}
aTextField?.text = returnMaskedPhoneField(textField.text)
if isEndOfString == false {
aTextField?.selectedTextRange = currentCurserPosition
}
}else {
aTextField?.text = returnMaskedPhoneField(textField.text)
}
}
}
}
它将像这样工作:
学分:
http://pjeremymalouf.com/creating-a-text-mask-in-swift/
如果你想使用自定义 textField
那么你可以使用 AKMaskField.
在哪里可以像这样找到 phone 的 textField
:
Swift 4 非常简单并且带有掩码最大文本字段长度和句柄返回 Space
//MARK: - text field masking
internal func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
//MARK:- If Delete button click
let char = string.cString(using: String.Encoding.utf8)!
let isBackSpace = strcmp(char, "\b")
if (isBackSpace == -92) && (textField.text?.count)! > 0 {
print("Backspace was pressed")
textField.text!.removeLast()
return false
}
if textField == txtworkphone
{
if (textField.text?.count)! == 3
{
textField.text = "(\(textField.text!)) " //There we are ading () and space two things
}
else if (textField.text?.count)! == 9
{
textField.text = "\(textField.text!)-" //there we are ading - in textfield
}
else if (textField.text?.count)! > 13
{
return false
}
}
}
Swift 4&&5 很简单Phone 数字掩码
您必须使用此代码作为文本字段委托。
func formattedNumber(number: String) -> String {
let cleanPhoneNumber = number.components(separatedBy: CharacterSet.decimalDigits.inverted).joined()
let mask = "## ### ###"
var result = ""
var index = cleanPhoneNumber.startIndex
for ch in mask! where index < cleanPhoneNumber.endIndex {
if ch == "#" {
result.append(cleanPhoneNumber[index])
index = cleanPhoneNumber.index(after: index)
} else {
result.append(ch)
}
}
return result
}
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
guard let text = textField.text else { return false }
let newString = (text as NSString).replacingCharacters(in: range, with: string)
textField.text = formattedNumber(number: newString)
return false
}