Пользовательская проблема с UISearchBar и UISearchController

Я хотел бы задать более конкретный вопрос этому.

Я реализовал пользовательский UISearchBar и, следовательно, пользовательский UISearchController, так как это казалось единственным решением, чтобы панель поиска не отображала кнопку «Отмена». Это действительно решило упомянутую проблему, но создало новую. По какой-то причине метод делегата updateSearchResultsForSearchController: (из viewController, где я реализовал searchController) больше не вызывается (он вызывается при первом нажатии на панель поиска, но не при вводе строки поиска), в то время как это происходит со стандартными UISearchController и UISearchBar. В результате таблица результатов поиска не отображается вообще.

Вот мой код для SearchBar.h

@interface SearchBar : UISearchBar

@end

и SearchBar.m

#import "SearchBar.h"

@implementation SearchBar

- (void)setShowsCancelButton:(BOOL)showsCancelButton {
    // Do nothing...
}

- (void)setShowsCancelButton:(BOOL)showsCancelButton animated:(BOOL)animated {
    // Do nothing....
}

@end

а также SearchController.h

@interface SearchController : UISearchController

@end

и SearchController.m

#import "SearchController.h"
#import "SearchBar.h"

@interface SearchController () {
SearchBar *_searchBar;
}
@end

@implementation SearchController

- (void)viewDidLoad {

    [super viewDidLoad];
}

- (void)didReceiveMemoryWarning {

    [super didReceiveMemoryWarning];
}

- (SearchBar *)searchBar {

    if (_searchBar == nil) {
        _searchBar = [[SearchBar alloc] initWithFrame:CGRectZero];
    }
    return _searchBar;
}

@end

В MyViewController.h я подписываюсь на следующие протоколы:

@interface MyViewController : UIViewController <UISearchBarDelegate, UISearchControllerDelegate, UISearchResultsUpdating>

Кто-нибудь может увидеть, что я мог пропустить? Заранее спасибо.


person artooras    schedule 06.07.2015    source источник
comment
См. этот ответ. Я думаю, вам нужно убедиться, что searchBar активирует контроллер поиска, возможно, в методе делегата textDidChange: searchBar.   -  person pbasdf    schedule 07.07.2015
comment
Если единственное, что вы хотите сделать, это избавиться от кнопки «Отмена», почему вы просто не установили соответствующее свойство для UISearchBar?   -  person Rafael Bugajewski    schedule 09.07.2015
comment
Спасибо @pbasdf, настройка self.searchController.active = YES сделала это за меня. Однако, в отличие от вашего связанного ответа, я установил MyViewController как searchBar.delegate, поскольку мне также требовалась другая производительность делегата в моем контроллере представления.   -  person artooras    schedule 13.07.2015
comment
@ Рафаэль, к сожалению, свойство, кажется, ничего не делает, поэтому обходной путь ..   -  person artooras    schedule 13.07.2015