UINavigationController控制器push子控制器時(shí)冕杠,修改返回控件的樣式兆衅,需要重寫(xiě)系統(tǒng)方法:
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated;
在添加跟控制器的時(shí)候也執(zhí)行該push方法牛隅,所以需要進(jìn)行判斷子控制器竭翠;
if (self.childViewControllers.count > 0) {
? ? ? ?viewController.hidesBottomBarWhenPushed = YES;
? ? ? ?UIButton *backBtn = [UIButton buttonWithType:UIButtonTypeCustom];
? ? ? ?[backBtn setImage:[UIImage imageNamed:@"backNav"] forState:UIControlStateNormal];
? ? ? ?[backBtn setImage:[UIImage imageNamed:@"backNav"] forState:UIControlStateHighlighted];
? ? ? ?[backBtn addTarget:self action:@selector(OnClickBack) forControlEvents:UIControlEventTouchUpInside];
? ? ? ?[backBtn sizeToFit];
? ? ? ?UIBarButtonItem *leftItem = [[UIBarButtonItem alloc] initWithCustomView:backBtn];
? ? ? ?viewController.navigationItem.leftBarButtonItem = leftItem;
? ?}
? ?[super pushViewController:viewController animated:animated];
可以不用設(shè)置backBtn的frame,但是[backBtn sizeToFit];必須寫(xiě)象缀,否則按鈕不顯示蔬将;
OnClickBack執(zhí)行pop操作:
- (void)OnClickBack{
? ?[self popViewControllerAnimated:YES];
}
這樣重寫(xiě)返回按鈕,你就會(huì)發(fā)現(xiàn)原來(lái)系統(tǒng)自帶的滑動(dòng)返回手勢(shì)失效了央星;所以還需要重新設(shè)置一下手勢(shì)霞怀,方法有很多種,我現(xiàn)在只介紹其中最簡(jiǎn)單方便的一種:
在viewDidLoad中重新設(shè)置一些手勢(shì)的代理:
self.interactivePopGestureRecognizer.delegate = self;
實(shí)現(xiàn)一下代理方法:
#pragma mark - UIGestureRecognizerDelegate
-(BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer{
?return self.childViewControllers.count > 1;
}
這樣手勢(shì)就可以了@蚋1惺!颓遏!搞定~~