2

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

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

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

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

4

1 回答 1

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];
        }
    }
}
于 2013-08-14T03:06:47.547 回答