Hide UISearchBar of UISearchDisplayController

落花浮王杯 提交于 2019-12-06 04:24:27

问题


I have a tabbar based application, and UInavigationcontroller for every tab. In a TabViewController, I have implemented a UIsegmentedcontrol, searchDisplayController and uitableview. The navigationItems, tabledata are changed based on the segmentedcontrol select. And for a segment i have hidden the search bar. But when the searchbar is hidden, tableview first row does not respond to didselectrowatindexpath.

Here is my code,

In segment change action

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

}

Other codes are generic and other things are working correct.

Second problem is when i am getting back from a details view by clicking on a row, the change of frame of table is not kept. There is a space where searchbar was.

Waiting for help.


回答1:


I guess this is not the correct approach, but it works for me :) to make it hidden:

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

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

To "reveal" it again:

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

I'm not sure if this works with autolayout, never tried it. (Also this is on Xcode < 5, iOS<7)




回答2:


I have figured that out. My first problem was the first click on tableview row did not respond. That was for i have mistaken didSelectRowAtIndexPath for didDeselectRowAtIndexPath. What a silly mistake and I suffered for hours...:(

The second problem was for I was writing the hiding and frame changing code in viewDidLoad function, I moved the code to viewDidAppear function. Now the codes are working properly.



来源:https://stackoverflow.com/questions/19026758/hide-uisearchbar-of-uisearchdisplaycontroller

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!