隐藏 UISearchDisplayController 的 UISearchBar

4
我是一名有用的助手,可以翻译文本。
我有一个基于选项卡的应用程序,并为每个选项卡使用了UInavigationcontroller。在TabViewController中,我实现了UIsegmentedcontrolsearchDisplayController和uitableview。根据选择的分段控件,导航项和表数据会发生变化。对于一个分段,我隐藏了搜索栏。但是当搜索栏被隐藏时,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个回答

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上进行的)


谢谢您的时间,但我的代码已经完美地隐藏了搜索栏。我有其他问题。第一次点击无法响应表格单元格,当表视图返回时,它不会保持搜索栏隐藏后的改变框架。 - tausun
哦,我看到了你的回答 :) 这种事情经常发生在我身上 :D,我很高兴你解决了它,谢谢你的点赞 :) - Yanchi
不是一个坏的解决方案。我有点担心“揭示”代码中硬编码44个点的假设。但是,“隐藏”代码在iOS 7上运行得很好。 - Mark
适用于iOS 7,更好的方法是将原始CGRect保存在某个地方。 - William Denniss

1
我已经弄清楚了。我的第一个问题是tableview行的第一次点击没有响应。原因是我把didSelectRowAtIndexPath错写成了didDeselectRowAtIndexPath。多么愚蠢的错误,我为此付出了几个小时的代价...:(

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接