2015-08-14 19 views
2

Как настроить маску для текстового поля в swift? например, текстовое поле телефона, когда пользователь должен набрать его шоу, как в формате телефона, как этот код в Objective-C:Маска textField в swift

self.textField.mask = @"(##)####-####"; 

ответ

1

Таким образом, вы можете создать телефонную маску в 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) 
      } 
     } 
    } 
} 

И он будет работать как:

enter image description here

Кредиты:

http://pjeremymalouf.com/creating-a-text-mask-in-swift/

И если вы хотите использовать пользовательские textField, то вы можете использовать AKMaskField.

Где можно найти textField для телефона, как это:

enter image description here

Смежные вопросы