Нажмите на пустой UITableView, чтобы отказаться от панели поиска.
-
19-09-2019 - |
Вопрос
У меня есть таблица с панелью поиска вверху.Когда я нажимаю на поиск, он вызывает службу экстренного реагирования и появляется клавиатура.На панели поиска есть кнопка отмены, но когда таблица пуста, я хочу, чтобы пользователь мог нажать в любом месте пустых строк таблицы, чтобы отказаться от панели поиска и клавиатуры в качестве первого ответчика.Как мне это сделать?
Решение
Вам придется создать свой собственный класс 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
Убедитесь, что вы настроили табличное представление в Interface Builder для использования своего собственного класса вместо обычного класса UITableView.Затем в контроллере представления реализуйте селектор, который я назвал touchEnded, следующим образом:
- (void)touchEnded;
{
NSLog(@"Back in root view controller.");
[searchBar resignFirstResponder];
}
Где searchBar — это IBOutlet, подключенный к UISearchBar в Interface Builder.
Другие советы
Да ты не попробуй......UISearchDisplayController
Просто определите их в своем файле .h.
IBOutlet UISearchBar* mySearchBar;UISearchDisplayController* mySearchDisplayController;IBOutlet UITableView* myTableView;
и обработать UISearchBarDelegate в .h
теперь в файле .m просто напишите этот код
mySearchDisplayController = [[UISearchDisplayController alloc] initWithSearchBar:mySearchBarcontentsController:self];mySearchDisplayController.searchResultsDelegate = self;mySearchDisplayController.searchResultsDataSource = self;mySearchDisplayController.delegate = self;
Я надеюсь, что это может помочь.......