NSTextField 掩码(Swift 2.2)

NSTextField Mask (Swift 2.2)

有谁知道如何在 Swift 中实现 NSTextField 掩码?需要为它做一个MAC地址掩码。

这应该让你继续。

class MacAddressFormatter : NSFormatter {
  override func stringForObjectValue(obj: AnyObject?) -> String? {
    if let string = obj as? String {
      return string
    }
    return nil
  }

  override func getObjectValue(obj: AutoreleasingUnsafeMutablePointer<AnyObject?>, forString string: String, errorDescription error: AutoreleasingUnsafeMutablePointer<NSString?>) -> Bool {
    if obj != nil {
      obj.memory = string
    }
    return true
  }

  override func isPartialStringValid(partialString: String, newEditingString newString: AutoreleasingUnsafeMutablePointer<NSString?>, errorDescription error: AutoreleasingUnsafeMutablePointer<NSString?>) -> Bool {

    if partialString.isEmpty { return true }  //allow empty field
    if partialString.characters.count > 17 { return false }  //don't allow too many chars

    let disallowedChars = NSCharacterSet(charactersInString: "0123456789ABCDEFabcdef:").invertedSet
    if let _ = partialString.rangeOfCharacterFromSet(disallowedChars, options: .CaseInsensitiveSearch) {
      error.memory = "Invalid entry.  MAC Address can only contain 0-9 & A-F"
      return false }

    var string = ""
    for char in partialString.characters {
      if char != ":" {
        string = string + String(char)
        if string.characters.count % 3 == 0 {
          string.insert(":", atIndex: string.endIndex.advancedBy(-1))
        }
      }
    }
    newString.memory = string.uppercaseString
    return false
  }
}

只需将此格式化程序分配给您的 NSTextField 并试一试!