Панель поиска в табличном представлении с searchDisplayController программно не редактируется - PullRequest
1 голос
/ 07 января 2011

Я пытаюсь создать табличное представление с панелью поиска внутри представления заголовка таблицы.Я хотел бы использовать searchDisplayController для управления всем.Я создал все программно (я не чувствую себя комфортно с IB), пытаясь установить все правильные свойства, но мне кажется, что я что-то упустил, потому что, когда появляется таблица, я не могу редактировать текст впанель поиска и увидеть любую анимацию.Вот часть кода:

- (void)viewDidLoad {
    [super viewDidLoad];
    UISearchBar *searchBarTMP=[[UISearchBar alloc]init];
    self.searchBar=searchBarTMP;
    [searchBarTMP release];
    self.searchBar.autocapitalizationType=UITextAutocapitalizationTypeNone;
    self.searchBar.delegate=self;
    self.searchBar.showsScopeBar=YES;
    self.searchBar.keyboardType=UIKeyboardTypeDefault;
    self.searchBar.userInteractionEnabled=YES;
    self.searchBar.multipleTouchEnabled=YES;

    self.searchBar.scopeButtonTitles=[NSArray arrayWithObjects:NSLocalizedString(@"City",@"Scope City"),NSLocalizedString(@"Postal Code",@"Scope PostalCode"),nil];
    self.tableView.tableHeaderView=searchBar;
    self.searchBar.selectedScopeButtonIndex=0;
    self.navigationItem.title=NSLocalizedString(@"Store",@"Table title");

    //SearchDisplayController creation
    UISearchDisplayController *searchDisplayControllerTMP = [[UISearchDisplayController alloc] initWithSearchBar:self.searchBar contentsController:self];
    self.searchDisplayController=searchDisplayControllerTMP;
    [searchDisplayControllerTMP release];
    self.searchDisplayController.delegate=self;
    self.searchDisplayController.searchResultsDelegate=self;
    self.searchDisplayController.searchResultsDataSource=self;  

    //....continue
}

Я знаю, что когда вы используете только панель поиска, вы должны иметь дело с ее протоколом делегата, но я предполагаю, что searchDisplayController управляет вами, как это видно в Appleобразец кода.(построить с IB).

Есть предложения?Спасибо, Андреа

Ответы [ 2 ]

1 голос
/ 08 января 2011

Нашел это ... После помещения в заголовок табличного представления необходимо написать

[self.searchBar sizeToFit];
0 голосов
/ 09 июня 2013

Если вы используете ARC, убедитесь, что вы создали iVar для UISearchDisplayController в вашем заголовочном файле.

Если вы создаете UISearchDisplayController, используя:

UISearchDisplayController* searchDisplayController = [[UISearchDisplayController alloc] initWithSearchBar:searchField contentsController:self];

он будет выпущен ARC, он не будет вызывать какие-либо методы делегата, а когда вы вызовете self.searchDisplayController (свойство UIViewController), он будет nil.

Итак, исправление: В вашем файле заголовка (.h):

@interface MenuViewController : UIViewController <UITableViewDataSource, UITableViewDelegate, UISearchBarDelegate, UISearchDisplayDelegate> {
        UISearchDisplayController* searchDisplayController;
        UISearchBar *searchField;
        UITableView* tableView;
        NSArray* searchResults;
}

и в файле реализации (.m):

searchField = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 49)];
searchField.delegate = self;

searchDisplayController = [[UISearchDisplayController alloc] initWithSearchBar:searchField contentsController:self];
searchDisplayController.delegate = self;
searchDisplayController.searchResultsDataSource = self;
searchDisplayController.searchResultsDelegate = self;

tableView.tableHeaderView = searchField;
tableView.contentOffset = CGPointMake(0, searchField.frame.size.height);

При такой реализации вы можете вызывать self.searchDisplayController и searchDisplayController в остальной части кода.

...