Вам нужно будет создать свой собственный класс UITableView, который переопределяет метод touchesEnded. Затем вы можете перезвонить своему делегату, который должен быть вашим контроллером представления, и сказать ему, чтобы ваш UISearchBar оставил первого ответчика в отставке.
Производный класс UITableView будет выглядеть примерно так:
#import <UIKit/UIKit.h>
@interface FRTableView : UITableView {
}
@end
// ------------------------------
#import "FRTableView.h"
@implementation FRTableView
- (id)initWithFrame:(CGRect)frame {
if (self = [super initWithFrame:frame]) {
// Initialization code
}
return self;
}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
[super touchesEnded:touches withEvent:event];
NSLog(@"Touches ended");
// Bubble back up to your view controller which should be this
// table view's delegate.
if ([self delegate] && [[self delegate] respondsToSelector:@selector(touchEnded)])
[[self delegate] performSelector:@selector(touchEnded)];
}
@end
Убедитесь, что вы установили в табличном представлении в Интерфейсном Разработчике использование своего пользовательского класса вместо обычного класса UITableView. Затем в вашем контроллере представления реализуйте селектор, который я назвал touchEnded следующим образом:
- (void)touchEnded;
{
NSLog(@"Back in root view controller.");
[searchBar resignFirstResponder];
}
Где searchBar - это IBOutlet, подключенный к UISearchBar в Интерфейсном Разработчике.