2015-01-18 14 views
5

Ich habe diesen Beispielcode über gefunden, wie das Textfeld für die UIAlertControllerhinzufügen, aber ich bin nicht in der Lage die die Benutzer beschränken nur 10 Zeichen als Grenze ich eine Funktion eingeben, um das letzte Zeichen, wenn es zu entfernen ist vorbei, wenn Bearbeitung für ein normales Textfeld geändert, aber nicht in der Lage, das Textfeld auf der UIAlertController zu überprüfen.Beschränken Sie die Eingabe eines Textfelds in UIAlertController, wenn der Benutzer mit swift?

//Function to Remove the last character 

func trimStr(existStr:String)->String{ 

    var countExistTextChar = countElements(existStr) 

    if countExistTextChar > 10 { 
     var newStr = "" 
     newStr = existStr.substringToIndex(advance(existStr.startIndex,(countExistTextChar-1))) 
     return newStr 

    }else{ 
     return existStr 
    } 

} 

var inputTextField: UITextField? 

    //Create the AlertController 
    let actionSheetController: UIAlertController = UIAlertController(title: "Alert", message: "Swiftly Now! Choose an option!", preferredStyle: .Alert) 

    //Create and add the Cancel action 
    let cancelAction: UIAlertAction = UIAlertAction(title: "Cancel", style: .Cancel) { action -> Void in 
     //Do some stuff 
    } 
    actionSheetController.addAction(cancelAction) 
    //Create and an option action 
    let nextAction: UIAlertAction = UIAlertAction(title: "Next", style: .Default) { action -> Void in 


    } 
    actionSheetController.addAction(nextAction) 
    //Add a text field 
    **actionSheetController.addTextFieldWithConfigurationHandler { textField -> Void in 
     //TextField configuration 
     textField.textColor = UIColor.blueColor() 

     inputTextField = textField** 


    } 

    //Present the AlertController 
    self.presentViewController(actionSheetController, animated: true, completion: nil) 

Vielen Dank.

Antwort

8

Sie können die Delegierten des Textfelds Alarm-Controller als zum Beispiel hier https://stackoverflow.com/a/24852979/1187415 zeigten:

actionSheetController.addTextFieldWithConfigurationHandler { [weak self] textField -> Void in 
    //TextField configuration 
    textField.textColor = UIColor.blueColor() 
    textField.delegate = self 
} 

Beachten Sie, dass das UITextFieldDelegate Protokoll zu Ihrer View-Controller-Definition hinzufügen müssen, dass kompilieren:

class ViewController: UIViewController, UITextFieldDelegate { 
    // ... 

Dann implementieren Sie die shouldChangeCharactersInRange Delegatmethode, , die immer dann aufgerufen wird, wenn der Text in Antwort auf Benutzerinteraktion geändert wird. Es kann true oder false zurückgeben, um die Änderung zu erlauben oder es zu bestreiten.

Es gibt verschiedene Beispiele, wie die Textfeldlänge in dieses Delegatmethode zu begrenzen, ist hier eine mögliche Implementierung:

func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, 
    replacementString string: String) -> Bool { 
     let newString = (textField.text as NSString).stringByReplacingCharactersInRange(range, withString: string) as NSString 
     return newString.length <= 10 
} 

Dieser Eingang ignoriert werden verursacht, wenn es um das Textfeld Länge verursachen würde größer sein als 10. Alternativ könnte man immer die Eingabe zu 10 Zeichen gestutzt:

func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, 
    replacementString string: String) -> Bool { 
     let newString = (textField.text as NSString).stringByReplacingCharactersInRange(range, withString: string) 
     textField.text = trimStr(newString) 
     return false 
} 

Ein Nachteil des zweiten Verfahrens besteht darin, dass der Cursor immer j ups an das Ende des Textfelds, auch wenn Text irgendwo zwischen eingefügt wird.

Verwandte Themen