UITextField Target/Action против методов делегата
Я использовал 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.
В чем разница между этими двумя подходами? Первый реализует последнее за кадром? Я не понимаю, почему один позволит мне пролистывать, а другой нет. Я просто реализовал методы делегата иначе, чем подход "цель / действие" за кулисами?
Обратная связь приветствуется, пачун
2 ответа
Это не имеет ничего общего с целью / действием. Я предполагаю, что вы имеете в виду в Интерфейсном Разработчике вы бы перетащить из UITextField
к File's Owner
и выберите делегата от HUD.
Выполнение вышеизложенного будет иметь эффект назначения делегата textField, что вам нужно будет сделать в коде, подобном этому
@email_field.delegate = self
@password_field.delegate = self
Вышесказанное предполагает, что класс, который создает UITextField
будет действовать как их делегат.
Я не знаю, есть ли какая-либо разница между делегированием и целью / действием в этом случае, но с делегированием этот способ работает:
- (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;
}
С уважением