Пользовательские жесты UIBackButtonItem и UINavigationController

Мне нужно иметь UINavigationBar с обычаем UIBarButtonItem,

Я знаю, как это сделать (с пользовательским представлением), но есть одна проблема:

Использование кнопки "Назад" по умолчанию дает нам жесты iOS 7, поэтому мы можем провести пальцем, чтобы вернуться и т. Д., Используя пользовательские UIBarButtonItem пункт не дает нам эти жесты.

Как мы можем создавать собственные UIBarButtonItem и поддерживать жесты iOS 7?

Я не хочу создавать целый жест с самого начала, я не верю, что это единственный способ.

2 ответа

Жесты могут быть в основном добавлены в любой UIView с помощью метода жеста addGesture:(UIGestureRecognizer *).

По сути, вам нужно создать экземпляр объекта UISwipeGestureRecognizer, установить любые свойства, которые вы хотите, и реализовать его делегат. Затем просто добавьте его в представление, в котором вы хотите, чтобы UISwipeGestureRecognizer был распознан.

Так, например, поскольку UINavigationBar наследуется от UIView, вы можете отправить ему жестовое сообщение addGesture:(UIGestureRecognizer *) следующим образом:

UINavigationBar *myNavigationBar = [UINavigationBar new];
[self.view addView:myNavigationBar]; // 'self' refers to your view controller assuming this is where your code lives
UISwipeGestureRecognizer *swipeGesture = [UISwipeGestureRecognizer new]; // use the designated initializer method instead
[myNavigationBar addGesture:swipeGesture]; // again, this method is inherited from UIView, it's how you add gestures to views
[myNavigationBar setUserInteractionEnabled:YES]; // this is very important for enabling gestures

Вот и ты.

Имейте в виду, что это половина работы, потому что вы хотите реализовать анимацию, чтобы она выглядела так, будто вы перелистываете страницу, а она движется, когда вы перелистываете.

Вы можете использовать небольшую хитрость, чтобы заставить работать родной жест. Создать подкласс UINavigationItemзатем переопределить leftBarButtonItems метод:

- (NSArray*)leftBarButtonItems
{
    return nil;
}

Теперь используйте этот класс для элемента, который имеет пользовательский левый UIBarButtonItem, Жест работает! Это потому что UINavigationController думает, что нет оставленных предметов и включает жест. Вы по-прежнему можете получить доступ к своему элементу через leftBarButtonItem имущество.

Другие вопросы по тегам