2013-09-26 2 views
4

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

Вот мой код,

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

- (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]; 

}

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

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

Ждет поддержки.

ответ

1

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

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

6

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

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; 

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

+0

Благодарим за ваше время, но мой код отлично скрывает панель поиска. У меня проблема где-то в другом месте. Первый щелчок не отвечает на табличную панель, и когда табличное представление возвращается, оно не сохраняет измененный кадр после скрытия поиска – tausun

+0

Ой, я вижу твой ответ :) Вещи вроде бы со мной все время: D, я рад, что вы это поняли, и спасибо за upvote :) – Yanchi

+0

Неплохое решение. Я немного опасаюсь жестко закодированного предположения о 44 пунктах в «раскрывающемся» коде. Но, «скрытый» код работает отлично с iOS 7. – Mark

Смежные вопросы