Лучший метод, который я видел для этого, - это добавить прозрачное подпредставление, которое накладывается на текстовое представление и обрабатывает сначала TouchesBegan.Затем вы можете обнаружить прикосновения за пределами текстового поля и отклонить клавиатуру, оставив текстовое поле в качестве первого респондента.
Например, создайте вложенное подпредставление в IB или программно, в любом случае.Разместите и измерьте его так, чтобы он покрывал текстовые представления, и придавайте ему ясный цвет.Если вы добавляете вид через IB, скрывайте его, когда ваш основной вид загружается, чтобы он еще не поглощал прикосновения, например так:
- (void)viewDidLoad
{
[super viewDidLoad];
overView.hidden = YES;
}
Затем, когда текстовое поле начинает редактирование, раскройте вид:
- (void)textFieldDidBeginEditing:(UITextField *)textField
{
overView.hidden = NO;
}
Когда текстовое поле завершает редактирование, снова откройте вид:
- (void)textFieldDidEndEditing:(UITextField *)textField
{
overView.hidden = YES;
}
Добавьте touchchesBegan, чтобы обнаруживать прикосновение к скрытому overView:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];
// Resign first responder if touch is outside text field
if ([touch view] != myTextField)
[myTextField resignFirstResponder];
// Send touches up the responder chain (pass them through)
[self.nextResponder touchesBegan:touches withEvent:event];
}
Вы также можете сделать это с помощью пользовательских жестов, но это работает только с iOS 4.x и, на мой взгляд, более сложно.