Я хочу, чтобы все текстовые поля реагировали в реальном времени, я хочу, чтобы все они захватили символы, которые были напечатаны и что-то сделали, но, похоже, я не могу заставить два утверждения действовать в гармонии внутри метода textField:shouldChangeCharactersInRange
. вот код, который я пытаюсь выполнить:несколько операторов внутри textField: shouldChangeCharactersInRange метод?
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
let invalidCharacters = NSCharacterSet(charactersInString: "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890_").invertedSet
if textField == usernameTxt || textField == passwordTxt || textField == confirmTxt {
if let range = string.rangeOfCharacterFromSet(invalidCharacters, options: nil, range:Range<String.Index>(start: string.startIndex, end: string.endIndex)) {
println("error")
return false
}
return true
}; if range.length + range.location > count(usernameTxt.text) {
return false
}else {
let NewLength = count(usernameTxt.text) + count(string) - range.length
return NewLength <= 5
}
return true
}
первое утверждение кода работает, когда он один в FUNC, однако, когда я пытаюсь добавить второе заявление, я получаю следующее сообщение об ошибке:
почему так? и как я должен достичь этого правильно?
и у меня есть этот последний метод для реализации в функции, которая будет проверять в режиме реального времени, если имя пользователя уже принято:
var isTaken: Bool = false
var query = PFQuery(className: "_User")
query.whereKey("username", equalTo: usernameTxt.text)
query.findObjectsInBackgroundWithBlock {
(objects: [AnyObject]?, error: NSError?) in
if error == nil {
if (objects!.count > 0){
isTaken = true
let myAlert = SCLAlertView().showError("Woah There", subTitle: "username \(textField.text) is already taken", closeButtonTitle: "Got It")
myAlert.alertview.contentView.backgroundColor = UIColor(red:1.0, green:0.18, blue:0.18, alpha:1.0)
myAlert.alertview.circleBG.backgroundColor = UIColor(red:1.0, green:0.18, blue:0.18, alpha:1.0)
myAlert.alertview.labelTitle.textColor = UIColor.whiteColor()
myAlert.alertview.contentView.layer.borderColor = UIColor(red:1.0, green:0.18, blue:0.18, alpha:1.0).CGColor
myAlert.alertview.viewText.textColor = UIColor.whiteColor()
myAlert.alertview.viewText.backgroundColor = UIColor(red:1.0, green:0.18, blue:0.18, alpha:1.0)
} else {
println("Username is available. ")
}
} else {
println("error")
}
}
Что происходит, когда вы удаляете второй «возврат истины», который находится прямо посреди вашего метода? Seemis, похоже, возможно, это отрезает метод до того, как у него есть время, чтобы перейти ко второму, если/then заявление, возможно, вернет false } return true }; если range.length + range.location> count (usernameTxt.text) {this return true statment, а не нижний – Loxx
, когда я отделяю средние возвращаемые истинные утверждения, он не имеет никакого эффекта для последнего, вероятно, потому, что средний возврат истинного оператора привязывается только к первому утверждению, а не ко всей функции. –
О да, nvm, я вижу, что вы делаете, одна секунда – Loxx