自定义UIBackButtonItem和UINavigationController手势

时间:2014-04-14 17:08:12

标签: ios objective-c ios7

我需要UINavigationBar使用自定义UIBarButtonItem

我知道怎么做(使用自定义视图),但有一个问题:

使用默认后退按钮项目为我们提供了 iOS 7 手势,因此我们可以滑动返回等,使用自定义UIBarButtonItem项目不会给我们这些手势。

我们如何创建自定义UIBarButtonItem并维护 iOS 7 手势?

我不想从头开始构建完整的滑动手势,我不相信这是唯一的方法。

2 个答案:

答案 0 :(得分:1)

手势基本上可以使用addGesture :( UIGestureRecognizer *)手势方法添加到任何UIView。

基本上,您需要实例化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

你去吧。

请记住,这只是工作的一半,因为您希望实现动画,使其看起来像您正在刷页面并在您滑动时移动。

答案 1 :(得分:0)

您可以使用一个小技巧来使本机手势正常工作。 创建UINavigationItem的子类,然后覆盖leftBarButtonItems方法:

- (NSArray*)leftBarButtonItems
{
    return nil;
}

现在将此类用于具有自定义左UIBarButtonItem的项目。手势有效!这是因为UINavigationController认为没有剩下的项目并启用了手势。您仍然可以通过leftBarButtonItem属性访问自定义项目。