self.navigationItem.hidesBackButton = YES并在iOS7上使用滑动手势返回

时间:2014-01-28 16:01:42

标签: ios objective-c cocoa uinavigationcontroller uinavigationitem

我在使用UINavigationController的UIViewController中编写下面的代码。

- (void)viewDidLoad {
    [super viewDidLoad];

    self.navigationItem.hidesBackButton = YES;
    self.navigationController.interactivePopGestureRecognizer.delegate = (id<UIGestureRecognizerDelegate>) self;
}

我构建并运行我的应用程序,

self.navigationItem.hidesBackButton = YES;
上面

正常,但

self.navigationController.interactivePopGestureRecognizer.delegate = (id<UIGestureRecognizerDelegate>) self;

一个不起作用。

所以,我重新编写下面的代码。

- (void)viewDidLoad {
    UIBarButtonItem *backBarButton = [[UIBarButtonItem alloc] initWithCustomView:[[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 44.0f, 44.0f)]];
    backBarButton.tintColor = [UIColor clearColor];
    self.navigationController.interactivePopGestureRecognizer.delegate = (id<UIGestureRecognizerDelegate>)self;
    self.navigationItem.leftBarButtonItem = backBarButton;
}

它正常工作。

但是,我想使用第一个例子。 第一个清楚地表达了我想要做的事情。

有人有任何想法吗?

1 个答案:

答案 0 :(得分:1)

viewDidLoad中,视图控制器尚未包含在导航控制器中,因此navigationController属性为nil,这就是该行无效的原因。

也就是说,分配UINavigationController的{​​{1}}代表并不是一个好习惯(我很确定它希望分配给导航控制器)。请尝试在interactivePopGestureRecognizer中禁用手势识别器:

viewWillAppear: