隐藏UISearchDisplayController的UISearchBar

时间:2013-09-26 11:17:24

标签: ios uitableview uisearchdisplaycontroller

我有一个基于tabbar的应用程序,每个标签都有UInavigationcontroller。在TabViewController中,我实施了UIsegmentedcontrolsearchDisplayController和uitableview。 navigationItems,tabledata基于segmentedcontrol选择进行更改。对于一个片段,我隐藏了搜索栏。但是当隐藏搜索栏时,tableview第一行不会响应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 个答案:

答案 0 :(得分: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;

我不确定这是否适用于autolayout,从未尝试过。 (这也是Xcode< 5,iOS< 7)

答案 1 :(得分:1)

我已经想到了。我的第一个问题是第一次点击tableview行没有回应。那是因为didSelectRowAtIndexPath错误didDeselectRowAtIndexPath。这是一个多么愚蠢的错误,我几个小时都遭受了...... :(

第二个问题是因为我在viewDidLoad函数中编写了隐藏和帧更改代码,我将代码移动到viewDidAppear函数。现在代码工作正常。