Скрыть / показать UINavigationbar при нажатии на экран - PullRequest
4 голосов
/ 20 ноября 2011

Я очень новичок в разработке для iOS, и я только что создал одно из моих первых приложений, в моем файле .xib у меня есть UINavigationBar, который я хочу скрыть / показать, когда часть экрана касаетсяпользователь (как в приложении Photo).Я нашел некоторые фрагменты в Интернете, но я не знаю, где и как их использовать.

Я был бы очень признателен, если бы кто-нибудь дал мне подробную информацию о том, как это сделать.

Ответы [ 2 ]

21 голосов
/ 21 ноября 2011

Добавьте этот метод переключения в любом месте вашего 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 голосов
/ 21 ноября 2011

В конечном итоге вы хотите отправить сообщение -setHidden: на панель навигации. Самый простой способ сделать это - создать Outlet и Action в вашем контроллере вида. Затем в файле .xib подключите панель навигации к розетке, а некоторую кнопку (даже большую, полноэкранную) к действию.

Аутлеты и Действия - это базовые приемы, которые снова и снова используются в iOS (и Mac) программирование, так что, если вы не понимаете их, лучше прочитайте на них сейчас. Каждая книга по программированию для iOS / Mac охватывает это Как и собственное руководство Apple Getting Started (платное обратите внимание на раздел Настройка вида ).

Внутри вашего действия отправьте сообщение в розетку следующим образом:

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

Это будет скрывать панель навигации при каждом нажатии вашей кнопки.

(Предполагается, что у вас есть UINavigationBar в вашем .xib, как вы говорите. Эти направления будут другими, если вы работаете с UINavigationController, который управляет собственным UINavigationBar)

...