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
,这就是该行无效的原因。
也就是说,分配UINavigationController
的interactivePopGestureRecognizer
的代表并不是好的做法(我很确定它希望分配给导航控制器)。请尝试禁用 viewWillAppear:
中的手势识别器:
- (void)viewWillAppear:(BOOL)animated
[super viewWillAppear:animated];
self.navigationController.interactivePopGestureRecognizer.enabled = NO;
【讨论】:
以上是关于self.navigationItem.hide Back Button = YES 并在 iOS 7 上使用滑动手势返回的主要内容,如果未能解决你的问题,请参考以下文章