Пользовательские жесты 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
имущество.