Actually, the premise of your question is wrong. Nothing has changed, except that you've discovered the truth. It was never necessary to say resignFirstResponder
if a text field targeted its "did end on exit" action: the mere fact of the targeting caused (and still causes) the Return key to perform dismissal automatically.
In fact, the "did end on exit" action doesn't actually have to do anything; no corresponding method need be implemented. And the target need not be a real object; it can be nil. In other words, this code will endow any text field with the "magical" property that it automatically dismisses the keyboard when the Return key is pressed:
[textField addTarget:nil action:@selector(dummy:)
forControlEvents:UIControlEventEditingDidEndOnExit];
That works (and has worked since as early as I've been using iOS, i.e. iOS 3) even though the target is nil and the action method is never implemented anywhere (there is no dummy:
method in the app). It always surprises me that this important technique is not more widely known.