Скрыть 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)