Вопрос

Раньше я использовал 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;
}
.

С уважением

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top