我已经实现了一个搜索表单的自定义版本,其行为很像带有作用域栏的UISearchBar(但实际上是出于UI原因而以编程方式拼凑在一起)。屏幕加载TextField,您在TextField中点击,导航栏在屏幕上显示动画,文本字段向上移动,并显示分段控件以过滤结果。
无论如何,这一切都有效,但当我点击其中一个搜索结果时,我的代码会推送一个新的ViewController。问题是新控制器在没有导航栏的情况下被推送(因为我在切换到搜索状态时使用了[[self navigationController] setNavigationBarHidden:YES animated:YES]
)。
我可以显示导航栏,因为新的ViewController被推送,甚至在转换到新的ViewController时显示动画 - 但所有这些解决方案看起来都很笨拙。我希望它像使用UISearchBar(实际上更像是电子邮件应用程序)一样工作,因为恢复的导航栏似乎只是从右侧滑入,就像它是子视图控制器的一部分一样。
我希望有一个简单的解决方法......谢谢
答案 0 :(得分:5)
对于任何人来说,解决方案是让您的控制器成为UINavigationController
的代表,然后在您的委托方法中显示或隐藏导航栏。
您的控制器需要实施协议:
@interface MYSearchController() <UINavigationControllerDelegate>
然后在-(void)viewDidLoad
中将您的控制器指定为委托:
[self navigationController].delegate = self;
最后,实现这样的方法:
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
if(viewController == self)
{
if(_searchState && ![self navigationController].navigationBarHidden)
{
[[self navigationController] setNavigationBarHidden:YES animated:YES];
}
}
else
{
if([self navigationController].navigationBarHidden)
{
[[self navigationController] setNavigationBarHidden:NO animated:YES];
}
}
}