2011-11-20 164 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