2012-03-08 2 views
0

Возможно, это простой вопрос, но я не могу понять, как правильно это сделать.Код проверки валидности между различными UITextFields

У меня есть UITextField. Так как мне нужно, чтобы проверить текст, который вставляется в это текстовое поле, я в настоящее время с помощью метода UITextFieldDelegate- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string как следующее:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{ 
    // do validation here 
    // return YES or NO depending on previous validation 
} 

Поскольку у меня есть некоторые текстовые поля (они не принадлежат к тому же контроллеру где проверка выполняется), и я не хочу дублировать код проверки текстовых полей, как я могу достичь элегантного способа централизовать аналогичную проверку? Я не знаю, подходит ли подклассов, но в этом случае мне нужно использовать один и тот же метод делегирования (тот, который указан выше) в разных частях одного и того же приложения.

Заранее спасибо.

ответ

2

Это зависит от объема информации, которую требует ваш код проверки. Если аргументы textField:shouldChangeCharactersInRange:replacementString: - все, что вам нужно, чтобы определить, следует ли возвращать YES или NO, тогда вы можете просто использовать один и тот же делегат для всех ваших текстовых полей.

Если вам необходимо отслеживать и хранить информацию о предыдущих валидациях для принятия решений о валидации, самым простым способом было бы упаковать все, что находится в объекте, и иметь массив этих объектов, каждый из которых соответствует определенному UITextField. Затем в textField:shouldChangeCharactersInRange:replacementString: вы должны использовать состояние, соответствующее переданному текстовому полю.

+0

+1 для вашего совета. Но что вы имеете в виду * вы можете просто использовать один и тот же делегат для всех ваших текстовых полей *? * UITextFields * могут принадлежать к различным контроллерам представлений, которые их содержат. Спасибо. –

+0

Я называю тебя, что ты имеешь в виду, и поднимешь еще то, что ты имеешь в виду. Нет причин, по которым два или более UITextFields не могут быть в разных диспетчерах представлений, но имеют один и тот же делегат. – yuji

+0

Я вижу. Вы предлагаете создать другой объект класса, который «реализует» (принимает) * UITextFieldDelegate *, а затем создает его в каждом контроллере там, где это необходимо. Затем установите этот делегат как назначенный для текстовых полей. Это правильно? –

Смежные вопросы