2011-11-20 137 views
4

我对iOS开发非常新,我刚刚创建了一个我的第一个应用程序,在我的.xib文件中我有一个UINavigationBar,我想隐藏/的屏幕是由用户点击(如在照片应用程序中)。我在网上发现了一些片段,但我不知道在哪里以及如何使用这些片段。当屏幕被点击时隐藏/取消隐藏UINavigationbar

如果有人能给我关于如何做到这一点的详细信息,我会很感激。

+1

已经被问到/回答http://stackoverflow.com/questions/1278527/detecting-tap-to-show-hide-uinavigationbar –

+0

@NathanialWoolls我把代码粘贴到我的ViewController.m,但我有错误“Use of未声明的标识符'delegateController'“,我该如何解决它?除了在ViewController.m中粘贴代码之外,我还需要做其他事情吗?感谢您的帮助。 – Edoardo

回答

21

在UIViewController任意位置添加此切换方法。这会在第一次点击时隐藏,并在第二次点击时再次显示。

- (void)toggleNavBar:(UITapGestureRecognizer *)gesture { 
    BOOL barsHidden = self.navigationController.navigationBar.hidden; 
    [self.navigationController setNavigationBarHidden:!barsHidden animated:YES]; 
} 

如果没有导航控制器,具有一个IBOutlet链接导航栏和带

- (void)toggleNavBar:(UITapGestureRecognizer *)gesture { 
    BOOL barsHidden = self.navBar.hidden; 
    self.navBar.hidden = !barsHidden; 
} 

然后替换添加在该方法中-(void)viewDidLoad {}

UITapGestureRecognizer *gesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(toggleNavBar:)]; 
[self.view addGestureRecognizer:gesture]; 
[gesture release]; 

如果视图,其中以下你要点击是一个UIWebViewController,你必须添加协议到视图控制器并将其设置为委托gesture.delegate = self;然后添加以下内容:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer 
shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer 
{ 
    return YES; 
} 

这是必需的,因为UIWebViewController已经实现了它自己的手势识别器。

+0

当你说“用我想要点击的视图替换self.view”时,我的应用中有一个UIWebView,但是如果我替换自己。用UIWebView查看我有一个警告“类方法”+ addGestureRecognizer:'找不到(返回类型默认为'id')“。难道我做错了什么?我该如何解决它?非常感谢您的帮助!! – Edoardo

+0

如果你声明了一个'@property IBOutlet UIWebView * webView',你应该用'webView'替换self.view,但不要用'UIWebView'(这就是为什么它说“类方法+”,你正在调用类的方法,而不是实例)。 – Jano

+0

好的,我做了所有事情,你告诉我:在头文件中声明我的webView,取代self.view,除了一些警告我没有错误。但是,当我调试,我点击屏幕上的酒吧仍然存在!这里[链接](http://www.eddev.eu/mb_prj.zip)我上传了我的Xcode项目,如果你能找到第二个来看看并理解我将非常感激的事情! – Edoardo

0

最终,您要发送-setHidden:消息到您的导航栏。最简单的方法是在您的视图控制器中制作一个插座和一个动作。然后,在您的.xib文件中,将导航栏连接到插座,并将某个按钮(即使是大屏幕全屏幕)连接到该操作。

出口和动作是反复使用iOS中 (和Mac)编程的基本技术,因此,如果您不了解它们,最好现在就去阅读 了他们。每个开始的iOS/Mac编程书籍都覆盖了这个 主题,正如苹果自己的Getting Started guide(特别注意 注意配置视图部分)。

里面你的行动,将消息发送到出口,像这样:

-(void)myButtonAction:(id)sender{ 
    [[self myNavigationBarOutlet] setHidden:YES]; 
} 

这将隐藏,只要您的按钮被点击导航栏。

(这里假设你有你的.xib一个UINavigationBar像你说的,这些方向将是不同的,如果你有一个管理UINavigationController工作自身的UINavigationBar