Uma maneira mais elegante é descartar o teclado quando o usuário toca em algum lugar fora do quadro do teclado.
Primeiro, defina a visualização do seu ViewController para a classe "UIControl" no inspetor de identidade do UIBuilder. Arraste a vista para o arquivo de cabeçalho do ViewController com a tecla Control pressionada e vincule-a como uma ação ao evento como Retoque interno, como:
ViewController.h
-(IBAction)dismissKeyboardOnTap:(id)sender;
No arquivo principal do ViewController, ViewController.m:
-(IBAction)dismissKeyboardOnTap:(id)sender
{
[[self view] endEditing:YES];
}
Você pode exigir um toque duplo ou toque longo usando técnicas semelhantes. Pode ser necessário definir seu ViewController como UITextViewDelegate e conectar o TextView ao ViewController. Este método funciona para UITextView e UITextField.
Fonte: Big Nerd Ranch
EDIT: Eu também gostaria de acrescentar que, se você estiver usando um UIScrollView, a técnica acima pode não funcionar tão facilmente através do Interface Builder. Nesse caso, você pode usar um UIGestureRecognizer e chamar o método [[self view] endEditing: YES] dentro dele. Um exemplo seria:
-(void)ViewDidLoad{
....
UITapGestureRecognizer *tapRec = [[UITapGestureRecognizer alloc]
initWithTarget:self action:@selector(tap:)];
[self.view addGestureRecognizer: tapRec];
....
}
-(void)tap:(UITapGestureRecognizer *)tapRec{
[[self view] endEditing: YES];
}
Quando o usuário toca fora do teclado e não toca em um espaço de entrada, o teclado será descartado.