For esilver: you can do this without resigning first responder by having a different textfield becomeFirstResponder and then having the relevant textfield becomeFirstResponder. The keyboard will not move in this case, and not trigger any hide notifications. If you don't have any other textfields, create a dummy textfield and set it to hidden = YES.
// This hack is in place to force auto-corrections to be applied
// before the text is sent.
[self sendChatWithBody: [self.toolbar.textView.text copy]];
I had a BOOL to ignore the delegate keyboard will appear messages, but still left issues with an index in a table view re-updating with a visible animation. Thank you.
For anyone trying the dummy text field strategy, make sure it has the same parent superview or else becomefirstResponder will be ignored!
And don't forget to set the properties inputAccessoryView, inputView and keyboardType in the same values as a original UITextView to avoid unwanted keyboard events.