gpt4 book ai didi

iOS - NavigationBar 显示在子 Controller 上,隐藏在父 Controller 上

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:29:59 24 4
gpt4 key购买 nike

我已经实现了一个自定义版本的搜索表单,它的行为很像带有范围栏的 UISearchBar(但实际上是出于 UI 原因以编程方式拼凑在一起)。屏幕加载了一个 TextField,您在 TextField 中点击,导航栏以动画方式离开屏幕,文本字段向上移动,并出现一个分段控件以过滤结果。

无论如何,一切正常,但是当我点击其中一个搜索结果时,我的代码会推送一个新的 ViewController。问题是新 Controller 在没有导航栏的情况下被推送(因为我在切换到搜索状态时使用了 [[self navigationController] setNavigationBarHidden:YES animated:YES])。

我可以在推送新 ViewController 时显示导航栏,甚至可以在出现向新 ViewController 的过渡时将其动画化 - 但所有这些解决方案看起来都很笨拙。我希望它像使用 UISearchBar(实际上更像电子邮件应用程序)一样工作,因为恢复的导航栏似乎只是从右侧滑入,就好像它是 subview Controller 的一部分一样。

我希望有一个简单的修复...谢谢

最佳答案

对于遇到这种情况的任何人,解决方案是让您的 Controller 成为 UINavigationController 的委托(delegate),然后在您的委托(delegate)方法中显示或隐藏导航栏。

你的 Controller 需要实现协议(protocol):

@interface MYSearchController() <UINavigationControllerDelegate>

然后在 -(void)viewDidLoad 中将您的 Controller 分配为委托(delegate):

[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];
}
}
}

关于iOS - NavigationBar 显示在子 Controller 上,隐藏在父 Controller 上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18221833/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com