swift - स्विफ्ट में यूआईटीडफास्टिल्ड में कुछ पात्रों को कैसे प्रतिबंधित किया जाए?




swift2 uitextfield (4)

मैं एक सामान्य ज्ञान अनुप्रयोग बना रहा हूँ जो स्टार्टअप पर यूज़रनेम के लिए पूछता है मैं इसे # $ @! ^ और आदि (जैसे "स्थान" भी शामिल है) जैसे वर्णों का उपयोग करना असंभव बनाना चाहता हूं। मैंने इस पोस्ट को यहां देखा, लेकिन इसे पूरी तरह से उद्देश्य-सी में लिखा गया है। अग्रिम में धन्यवाद।


चूंकि आप स्विफ्ट के लिए स्पष्ट रूप से पूछ रहे हैं, मैंने लिंक किए गए प्रश्न में शीर्ष एन्टर का अनुवाद किया है।

let notAllowedCharacters = " ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_.";

func textField(
    textField: UITextField,
    shouldChangeCharactersInRange range: NSRange,
    replacementString string: String)
    -> Bool
{
    let set = NSCharacterSet(charactersInString: notAllowedCharacters);
    let inverted = set.invertedSet;

    let filtered = string
        .componentsSeparatedByCharactersInSet(inverted)
        .joinWithSeparator("");
    return filtered != string;

}

internal func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool{
     if let text = string{
           if text == "#" || text == "$" || text == "!"{ \\and so on
              return false
           }
     }
     return true
}

स्विफ्ट: 3 और एक अलग दृष्टिकोण:

अपने दृश्य में टेक्स्ट फ़ील्ड परिवर्तन के लिए एक लक्ष्य फ़ंक्शन जोड़ेंडिडलोड:

    override func viewDidLoad() {
    super.viewDidLoad()
textField.addTarget(self, action: #selector(ViewController.textFieldDidChange(textField:)), for: UIControlEvents.editingChanged)
 }

लक्ष्य फ़ंक्शन में, केवल दर्ज किए गए चारों का पता लगाएं और इसे रिक्त स्थान के साथ बदलें मैंने इसे परीक्षण किया है और यह उपयोगकर्ता को पाठ क्षेत्र में किसी भी गैर वांछनीय वर्णों को दर्ज करने से रोकता है।

 func textFieldDidChange(textField: UITextField) {

    if let textInField = textField.text{
        if let lastChar = textInField.characters.last{

            //here include more characters which you don't want user to put in the text field
            if(lastChar == "*")
            {

                textField.text  = textInField.substring(to: textInField.index(before: textInField.endIndex))

            }
        }
    }

}

क्या इवेदज़न मुस्तफा ने कहा। यदि स्ट्रिंग खाली है, तो आप रिटर्न स्टेटमेंट जोड़ना चाहते हैं। इसके बिना आप अपना टेक्स्ट हटाना नहीं कर सकेंगे। संशोधित कोड नीचे:

स्विफ्ट 3 संस्करण

let notAllowedCharacters = " ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_.";

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    if string.isEmpty{
        return true
    }

    print("String: \(string)")
    let set = NSCharacterSet(charactersIn: notAllowedCharacters);
    let inverted = set.inverted;

    let filtered = string.components(separatedBy: inverted).joined(separator: "")
    print("String Filtered: \(filtered)")
    return filtered != string;
}




uitextfield