Цель/действие UITextField против методов делегирования
-
12-12-2019 - |
Вопрос
Раньше я использовал XCode для разработки своих приложений и использовал его;Я мог бы создать ссылку в IB/Storyboard, которая синтезировала бы эти методы:
- (void)addTarget:(id)target action:(SEL)action forControlEvents: (UIControlEvents)controlEvents
когда
Однако нет, я делаю все это программно (в Rubymotion, хотя это не обязательно актуально) и, просматривая документацию по UITextField, я нашел несколько методов делегата, которые я реализовал следующим образом:
def textFieldShouldReturn(text_field)
text_field.resignFirstResponder
end
def textFieldShouldEndEditing(text_field)
# this is for validations; don't set a first responder here
true
end
def textFieldDidEndEditing(text_field)
text_field == @email_field ? @password_field.becomeFirstResponder : delegate.validate_login_info
end
Но, используя это, я обнаружил, что не могу перемещаться по полям ввода (которых у меня два;адрес электронной почты и пароль), как я мог раньше, используя подход addTarget.
В чем разница между этими двумя подходами?Реализует ли первый последнее за кулисами?Я не понимаю, почему один позволяет мне переходить по вкладкам, а другой нет.Я только что реализовал методы делегата иначе, чем подход «цель/действие» за кулисами?
Обратная связь ценится, Pachun
Решение
Это не имеет ничего общего с целью/действием.Я предполагаю, что вы имеете в виду, что в Interface Builder вы должны перетащить из UITextField
к File's Owner
и выберите делегата в HUD.
Выполнение вышеизложенного приведет к назначению делегата textField, что вам нужно будет сделать в таком коде.
@email_field.delegate = self
@password_field.delegate = self
вышеизложенное предполагает, что класс, который создает UITextField
's будет выступать в качестве их делегата.
Другие советы
Я не знаю, есть ли разница между делегированием и целью / действием в этом случае, но с делегацией этого способа работает:
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
if (textField == self.firstTextField)
{
[self.secondTextField becomeFirstResponder];
}
else if (textField == self.secondTextField)
{
[textField resignFirstResponder];
// proceed with login
}
return YES;
}
- (BOOL)textFieldShouldEndEditing:(UITextField *)textField
{
// Validation
return YES;
}
.
С уважением