2016-03-21 3 views
0

У меня есть контроллер базового представления, и все мои контроллеры view наследуют его.iOS Push to another view controller застрял

@interface BaseViewController() <UIGestureRecognizerDelegate> 

@end 

@implementation BaseViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view. 

    self.tabBarController.tabBar.translucent = NO; 
    self.navigationController.navigationBar.translucent = NO; 

    self.navigationController.interactivePopGestureRecognizer.delegate = self; 

    self.view.backgroundColor = [UIColor colorWithRed:0.95 green:0.95 blue:0.95 alpha:1]; 
    self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:self.backButton]; 
    self.navigationItem.backBarButtonItem.title = @""; 
} 

- (void)didReceiveMemoryWarning { 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

- (UIStatusBarStyle)preferredStatusBarStyle { 
    return UIStatusBarStyleDefault; 
} 

- (void) popToPreViewController { 
    [self.navigationController popViewControllerAnimated:YES]; 
} 

#pragma mark - getter and setter 

- (UIButton *) backButton { 
    if (!_backButton) { 
     _backButton = [[UIButton alloc] initWithFrame:CGRectMake(0.0, 0.0, 20.0, 20.0)]; 
     [_backButton addTarget:self action:@selector(popToPreViewController) forControlEvents:UIControlEventTouchUpInside]; 
     [_backButton setImage:[UIImage imageNamed:@"main_back"] forState:UIControlStateNormal]; 
     _backButton.hidden = YES; 
    } 
    return _backButton; 
} 

@end 

Иногда нажать на другой контроллер зрения застрянет, но приложение не crash.Press кнопки домой и открыть приложение снова, это показывает контроллер другого вида. Что-то не так с этим базовым контроллером?

+0

предоставить больше коды, то, как вы представляете контроллеры отображения ребенка от базового вида контроллера –

+0

Один вопросов, которые я могу видеть очень небольшой набор кадров прямоугольника для кнопки возврата «_backButton = [[UIButton Alloc] initWithFrame: CGRectMake (0,0, 0,0, 20,0, 20,0)]; Он должен быть не менее 45x45 для получения правильного обратного переключения пользователя. Используйте кнопку вставки, чтобы поместить изображение кнопки и сохранить рамку 45x45 или больше –

+0

@ aman.sood Thx! – jxdwinter

ответ

0

Я был обеспокоен этой проблемой в течение длительного времени, теперь нашел решение. Причина этой проблемы заключается в том, что корневой контроллер выполняет операцию посылки жестов, возникает проблема, описанная выше. Обходной путь состоит в том, чтобы отключить позыв жестов в корневом контроллере и открыть позыв жесты на корневом контроллере.

/// The controller is fully displayed, opening the gesture pop 
Func navigationController (_ navigationController: UINavigationController, didShow viewController: UIViewController, animated: Bool) { 

    If viewControllers.first == viewController { 
     InteractivePopGestureRecognizer? .isEnabled = false 
    } Else { 
     InteractivePopGestureRecognizer? .isEnabled = true 
    } 

    NavigationBar.sendSubview (toBack: navigationBar.overlay) 
} 
Смежные вопросы