2016-03-30 11 views
0

Ich bin neu in der Entwicklung und ich versuche, die Anzahl der Zeichen, die in einem Textfeld eingegeben werden können, mit der neuesten Version von Swift zu begrenzen. Ich habe versucht, verschiedenen Tutorials zu folgen und habe ein paar verschiedene Antworten auf der Seite ausgecheckt, aber ich habe nicht viel Glück.Zeichen in UITextField begrenzen? - Swift/Xcode

Derzeit habe ich diese eingegeben in meiner schnellen Datei:

@IBAction func InfoTextFieldLimit(sender: UITextField) { 

     self.InfoTextField.delegate = self 

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

      let currentCharacterCount = textField.text?.characters.count ?? 0 
      if (range.length + range.location > currentCharacterCount) { 

       return false 
      } 

      let newLength = currentCharacterCount + string.characters.count - range.length 
      return newLength <= 10 
     } 
    } 

... Ich bin keine Fehler bekommen, aber nichts scheint der Fall zu sein, wenn ich die app laufen.

Ich habe auch mindestens 3 andere Methoden ausprobiert, die ich nicht kopiert habe. (kann aber auf Anfrage liefern)

Kann mir jemand sagen was ich falsch mache und mir in die richtige Richtung zeigen? Würde sehr geschätzt werden! ... Ich habe das Gefühl, dass ich eine gute Chance habe, etwas zu übersehen, was offensichtlich ist.

Ich werde das auch mit einem Textview tun wollen, wie würde das anders aussehen?

+0

gesetzt haben ist ein Link auf Ihre Frage an anderer Stelle: http://stackoverflow.com/questions/433337/set-the -maximum-character-length-of-a-uitextfield? rq = 1 – Nshweky

+0

Ich denke, das Problem ist, dass Sie den Delegaten nicht richtig gesetzt haben. Wofür wird die IBAction-Methode verwendet? Sie können "self" für den Textfelddelegaten in viewDidLoad festlegen. – Surely

Antwort

0

Ich hatte ursprünglich diesen Code in Objective-C:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { 
    NSUInteger newLength = [textField.text length] + [string length] - range.length; 
    return (newLength > 4) ? NO : YES; 
} 

ich es swift versuchte Umwandlung, lassen Sie mich wissen, ob es funktioniert ... Sie haben die UITextFieldDelegate Methode zu verwenden.

func textField(textField:UITextField,shouldChangeCharactersInRange range:NSRange,replacementString string:NSString)->Bool{ 
var newLength:NSUInteger = textField.text.length + string.length - range.length 

return null(newLength > 4)?false:true 

} 
+0

Ich hatte auch kein Glück mit diesem einen, aber ich war in der Lage, nach ein wenig mehr Versuch und Irrtum den ursprünglichen Code zu bekommen, der in meiner Frage funktioniert hatte. Ich denke, dass ich meine Delegiertenmethode falsch eingestellt hatte. Jedoch jetzt bin ich auf ein anderes kleines Problem gestoßen. Ich habe 3 verschiedene Textfelder in meinem Viewcontroller, und ich möchte nur die Amt begrenzen. von Zeichen in einem von ihnen im Gegensatz zu allen. Ich versuchte "if (textfield == MyTextField) {" nach "Bool {" aber jetzt stecke ich fest .. Wie würde ich das erreichen? ...Danke für die Hilfe! – aspenfox

+0

Es tut mir leid, ich bin mir nicht sicher, ob ich verstehe, was du sagst ... Der Vergleich der beiden Textfelder hat nicht funktioniert? – Nshweky

0
func textField(textField: UITextField, shouldChangeCharactersInRange range:  NSRange, replacementString string: String) -> Bool { 
    let maxLength = 50 
    guard let text = textField.text else { return true }  
    let newLength = text.characters.count + string.characters.count - range.length 
    return newLength <= maxLength 
} 

Auch stellen Sie sicher, dass die Delegierten des UITextField auf die hier UIViewController

+0

Dies ist nützlich, wenn Sie nur ein Textfeld haben Aber ich habe 5 Textfeld, dass ich eine von ihnen beschränken möchte, was soll ich tun? Bitte hilf mir –

Verwandte Themen