Скрыть UISearchBar из UISearchDisplayController

У меня есть приложение на основе вкладок, и UInavigationcontroller для каждой вкладки. В TabViewControllerЯ реализовал UIsegmentedcontrol, searchDisplayController и беспристрастный вид. Элементы навигации, табличные данные изменяются в зависимости от выбора сегментированного управления. И для сегмента я спрятал панель поиска. Но когда панель поиска скрыта, первая строка таблицы не реагирует на didselectrowatindexpath,

Вот мой код,

В действии изменения сегмента

- (void)indexDidChangeForSegmentedControl:(UISegmentedControl *)aSegmentedControl {
[self changeNavigationItems];

l.text = [NSString stringWithFormat:@"%d",self.segmentControl.selectedSegmentIndex];
if([segmentIndexesToHideSearchBar containsObject: [NSString stringWithFormat:@"%d", self.segmentControl.selectedSegmentIndex]])
{
    self.searchDisplayController.searchBar.hidden = YES;
    self.dataTable.frame = CGRectMake(0, 0, self.dataTable.frame.size.width, self.dataTable.frame.size.height);
}
else
{
    self.searchDisplayController.searchBar.hidden = NO;
    self.dataTable.frame = CGRectMake(0, 44, self.dataTable.frame.size.width, self.dataTable.frame.size.height);
}
[self.dataTable reloadData];

}

Другие коды являются общими, и все остальное работает правильно.

Вторая проблема - когда я возвращаюсь из подробного представления, нажимая на строку, смена кадра таблицы не сохраняется. Есть место, где была панель поиска.

Жду помощи.

2 ответа

Решение

Я понял это. Первой моей проблемой было то, что первый щелчок по строке таблицы не ответил. Это было, потому что я ошибся didSelectRowAtIndexPath за didDeselectRowAtIndexPath, Какая глупая ошибка и я часами терпел...:(

Вторая проблема заключалась в том, что я писал код скрытия и смены кадров в viewDidLoad функция, я переместил код в viewDidAppear функция. Теперь коды работают правильно.

Я думаю, что это не правильный подход, но он работает для меня:), чтобы скрыть это:

CGRect searchFrame = self.searchDisplayController.searchBar.frame;
searchFrame.size.height = 0;

self.searchDisplayController.searchBar.frame = searchFrame;
self.searchDisplayController.searchBar.hidden = YES;

Чтобы "раскрыть" это снова:

searchFrame.size.height = 44;
self.searchDisplayController.searchBar.frame = searchFrame;
self.searchDisplayController.searchBar.hidden = NO;

Я не уверен, что это работает с autolayout, никогда не пробовал. (Также это на Xcode < 5, iOS<7)

Другие вопросы по тегам