self.navigationItem.hide Back Button = YES 并在 iOS 7 上使用滑动手势返回

Posted

技术标签:

【中文标题】self.navigationItem.hide Back Button = YES 并在 iOS 7 上使用滑动手势返回【英文标题】:self.navigationItem.hidesBackButton = YES and go back with swipe gesture on iOS7 【发布时间】:2014-01-28 16:01:42 【问题描述】:

我在使用 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;

它工作正常。

但是,我想使用第一个示例。 第一个清楚地表达了我想要做什么。

有人知道吗?

【问题讨论】:

您是否尝试过先分配代理然后隐藏back 按钮? 看起来不错!当我在viewDidLoad 中执行此操作时,它不起作用。但是,在viewWillAppear 中,它可以正常工作。下一个问题出现了。现在,我在NavigationController-1,我想回到NavigationController 2。然后我尝试从“2”移动到“1”。但是,它只是尝试。我没有完成,最后我回到“2”。并看到 UINavigationBar,出现奇怪的点。为什么我会这样...... 【参考方案1】:

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

也就是说,分配UINavigationControllerinteractivePopGestureRecognizer 的代表并不是好的做法(我很确定它希望分配给导航控制器)。请尝试禁用 viewWillAppear: 中的手势识别器:

- (void)viewWillAppear:(BOOL)animated 
    [super viewWillAppear:animated];
    self.navigationController.interactivePopGestureRecognizer.enabled = NO;

【讨论】:

以上是关于self.navigationItem.hide Back Button = YES 并在 iOS 7 上使用滑动手势返回的主要内容,如果未能解决你的问题,请参考以下文章