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;
}

С уважением

Другие вопросы по тегам