Вместо вызова resignFirstResponder
вы должны вызвать endEditing:
для самого представления или любого из его суперпредставлений. endEditing:
будет искать во всех подпредставлениях любой вид, который имеет статус первого респондента, и попросит его подать в отставку.
endEditing:
принимает логический флаг в качестве параметра. Если установлено, это заставит первого респондента подать в отставку; в противном случае вы можете позволить ему сохранять фокус (например, если ввод недействителен). Для UITextField это определяется методом shouldEndEditing:
делегата.
В общем, хороший шаблон для использования:
- (void)saveAction:(id)sender
{
if ([self.view endEditing:NO]) {
NSString *text = self.textField.text;
// save text, login, do whatever
} else {
// show an alert (or rely on whatever refused to resign to inform the user why)
}
}