我在使用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;
}
它正常工作。
但是,我想使用第一个例子。 第一个清楚地表达了我想要做的事情。
有人有任何想法吗?
答案 0 :(得分:1)
在viewDidLoad
中,视图控制器尚未包含在导航控制器中,因此navigationController
属性为nil
,这就是该行无效的原因。
也就是说,分配UINavigationController
的{{1}}代表并不是一个好习惯(我很确定它希望分配给导航控制器)。请尝试在interactivePopGestureRecognizer
中禁用手势识别器:
viewWillAppear: