2012-05-20 2 views
2

Раньше я использовал XCode для разработки моих приложений и использования этого; Я мог бы создать связывают в IB/раскадровке, которые синтезирует эти методы:UITextField Target/Action vs Delegate Methods

- (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

ответ

1

Это не имеет никакого отношения к цели/действию. Я предполагаю, что вы имеете в виду в Interface Builder, который вы перетащите из UITextField в File's Owner и выберите делегат из HUD.

Doing выше будет иметь эффект назначения делегата в TextField, который Вы должны были бы сделать в коде, как этот

@email_field.delegate = self 
@password_field.delegate = self 

вышеизложенное предполагает, что класс, который создает UITextField «s будет выступать в качестве их делегировать.

0

Я не знаю, есть ли какая-то разница между делегированием и цели/действия в этом случае, но с делегацией так работает:

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

С уважением