2016-07-26 3 views
1

Итак, я хочу иметь UITextField, чтобы принимать только цифры, решаемые с помощью пользовательского ввода с клавиатуры.Установите UITextField в формат mm-dd-yy в swift

Намерение этого UITextField - получить день рождения. Я не хочу использовать жесткий диск UIDatePicker, так как мне не нравится его внешний вид.

Я бы хотел, чтобы TextField автоматически вставлял тире после каждой второй цифры, которую пользователь положил в TextField.

dd-mm-yy - это текст заполнителя. Я либо думал о том, чтобы делать тире навсегда, но я тоже не знаю, как это сделать.

Как я могу это сделать?

+0

увидеть это, как только вы получите идею http://stackoverflow.com/questions/34454532/how-add-separator-to-string-at-every- n-characters-in-swift –

+0

Используйте 'shouldChangeCharactersInRange', чтобы проверить добавленный новый текст/символы, а также выполнить проверку над count (text.length), чтобы добавить знак дефиса в соответствии с вашими требованиями. Ссылка: https://developer.apple.com/library/ios/documentation/UIKit/Reference/UITextFieldDelegate_Protocol/#//apple_ref/occ/intfm/UITextFieldDelegate/textField:shouldChangeCharactersInRange:replacementString: – Mrunal

ответ

1

Вы хотите, чтобы пользователь вводил текст в текстовое поле в этом dd-mm-yy? , если это так, я уверен, что это вам поможет.

  1. В верхней части вашего класса объявите эту переменную, которую мы собираемся использовать позже.

    var dateFormate = Bool() 
    
  2. Добавить делегат и тег для этого текстового поля.

  3. Затем добавьте следующий метод делегата

    func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool { 
    
    //1. To make sure that this is applicable to only particular textfield add tag. 
    if textField.tag == 1 { 
        //2. this one helps to make sure that user enters only numeric characters and '-' in fields 
        let numbersOnly = NSCharacterSet(charactersInString: "1234567890-") 
        let characterSetFromTextField = NSCharacterSet(charactersInString: string) 
    
        let Validate:Bool = numbersOnly .isSupersetOfSet(characterSetFromTextField) 
        if !Validate { 
         return false; 
        } 
        if range.length + range.location > textField.text?.characters.count { 
         return false 
        } 
        let newLength = (textField.text?.characters.count)! + string.characters.count - range.length 
        if newLength == 3 || newLength == 6 { 
         let char = string.cStringUsingEncoding(NSUTF8StringEncoding)! 
         let isBackSpace = strcmp(char, "\\b") 
    
         if (isBackSpace == -92) { 
          dateFormate = false; 
         }else{ 
          dateFormate = true; 
         } 
    
         if dateFormate { 
          let textContent:String! 
          textContent = textField.text 
          //3.Here we add '-' on overself. 
          let textWithHifen:NSString = "\(textContent)-" 
          textField.text = textWithHifen as String 
          dateFormate = false 
         } 
        } 
        //4. this one helps to make sure only 8 character is added in textfield .(ie: dd-mm-yy) 
        return newLength <= 8; 
    
    } 
    return true 
    } 
    
  4. Это сейчас пользователь может ввести свой DOB.No нужно беспокоиться о «-» он будет добавлен автоматически.

Swift 3:

func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool { 

    //1. To make sure that this is applicable to only particular textfield add tag. 
    if textField.tag == 1 { 
     //2. this one helps to make sure that user enters only numeric characters and '-' in fields 
     let numbersOnly = CharacterSet(charactersIn: "1234567890-") 

     let Validate = string.rangeOfCharacter(from: numbersOnly.inverted) == nil ? true : false 
     if !Validate { 
      return false; 
     } 
     if range.length + range.location > textField.text?.characters.count { 
      return false 
     } 
     let newLength = (textField.text?.characters.count)! + string.characters.count - range.length 
     if newLength == 3 || newLength == 6 { 
      let char = string.cString(using: NSUTF8StringEncoding)! 
      let isBackSpace = strcmp(char, "\\b") 

      if (isBackSpace == -92) { 
       dateFormate = false; 
      }else{ 
       dateFormate = true; 
      } 

      if dateFormate { 
       let textContent:String! 
       textContent = textField.text 
       //3.Here we add '-' on overself. 
       let textWithHifen:NSString = "\(textContent)-" 
       textField.text = textWithHifen as String 
       dateFormate = false 
      } 
     } 
     //4. this one helps to make sure only 8 character is added in textfield .(ie: dd-mm-yy) 
     return newLength <= 8; 

    } 
    return true 
}