Как настроить маску для текстового поля в swift? например, текстовое поле телефона, когда пользователь должен набрать его шоу, как в формате телефона, как этот код в Objective-C:Маска textField в swift
self.textField.mask = @"(##)####-####";
Как настроить маску для текстового поля в swift? например, текстовое поле телефона, когда пользователь должен набрать его шоу, как в формате телефона, как этот код в Objective-C:Маска textField в swift
self.textField.mask = @"(##)####-####";
Таким образом, вы можете создать телефонную маску в Swift.
Сначала создайте отличное расширение для типа String. Индекс получает символ в индексе, а функция получает тип String.Index из int !.
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)
}
}
И это функция, вызываемая по тексту в телефоне поле ввода номера:
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)
И это один где-то в классе, что ваш 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.
Где можно найти textField
для телефона, как это: