2015-10-22 3 views
0

Я хочу ограничить количество символов, которые пользователь может использовать в текстовом поле. Я воспользовался функцией по этой ссылке: Max length UITextField (Imanou Petit)Swift: Limit Characters # в textField без отключения/вмешательства в другие функции

Однако в моем представленииDidLoad() У меня есть несколько текстовых полей, которые я уже ссылаюсь на делегат, потому что я хочу, чтобы клавиатура «возвращалась», когда пользователь нажимает кнопку Return ключ на клавиатуре. Это я делаю через textFieldShouldReturn, как это (у меня также есть метод touchesBegan, но я хочу, чтобы пользователь также имеет возможность ключа Return):

func textFieldShouldReturn(textField: UITextField!) -> Bool { 


self.stuffOneTextField.resignFirstResponder() 
    self.linkTextField.resignFirstResponder() 
    self.descriptionTextField.resignFirstResponder() 
    self.ogTextField.resignFirstResponder() 
    self.priceTextField.resignFirstResponder() 

    return true 

} 

Если добавить в эту функцию ниже в viewDidLoad , тогда клавиша «Return» на клавиатуре не работает и ограничивает ВСЕ текстовые поля (у меня есть 5).

override func viewDidLoad() { 
    super.viewDidLoad() 


    self.stuffOneTextField.delegate = self 
    self.linkTextField.delegate = self 
    self.descriptionTextField.delegate = self 
    self.ogTextField.delegate = self 
    self.priceTextField.delegate = self 
} 

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

Мне нужно всего лишь ограничить 2 текстовых поля. Я пробовал просто вставить конкретное имя текстового поля, а не все текстовые поля как textField s, а затем он ограничивает 1 textField и не позволяет мне вводить другие ... Очень странно ...

Как сделать обойти это?

Любая помощь означает много.

ответ

2

Вам предоставляется textField, который меняет символы в функции делегата. Здесь вы можете сравнить его с конкретными полями, которые вы хотите ограничить:

func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool { 
    guard let text = textField.text else { return true } 
    if !(textField == stuffOneTextField || textField == descriptionTextField) { 
     return true 
    } 
    let newLength = text.characters.count + string.characters.count - range.length 
    return newLength <= limitLength 
} 

Кроме того, func textFieldShouldReturn(textField: UITextField!) -> Bool дает вам текстовое поле, и вы можете вызвать resignFirstResponder() на том, что, если это то, что вы хотите сделать там ,

+0

Спасибо за ответ. Где указать, как долго я хочу ограничить символы? Смущает константа newLength и возвращаемая дата ... И где этот метод помещается? В рамках другого метода? @Don – lukaivicev

+0

Я обновил ответ, чтобы показать, что это будет в теле func textField (textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String). Возвращаемое значение - это логическое значение, указывающее, находится ли типизированная строка под вашим лимитом размера limitLength. Как и в ответе на вопрос, который вы связали выше, 'limitLength' является константой, определенной в вашем классе. – Don

+0

Красивые. Огромное спасибо. – lukaivicev