2016-03-21 6 views
0

Ich habe einen Basis-View-Controller und alle meine Viewcontrollers erben es.iOS Push zu einem anderen View-Controller stecken bleiben

@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 

Manchmal zu einer anderen Ansicht Controller drücken wird stecken bleiben, aber die App nicht crash.Press Taste nach Hause und öffnen Sie die App wieder, es zeigt die anderen View-Controller. Ist etwas falsch mit diesem Baseviewcontroller?

+0

mehr Code zur Verfügung stellen, das, wie Sie Kind View-Controller von der Basis-View-Controller –

+0

One Fragen präsentieren, die ich sehr kleiner Rahmen rect Satz für die Zurück-Taste sehen ‚_backButton = [[UIButton Alloc] Initwithframe: CGRectMake (0,0, 0,0, 20,0, 20,0)]; Es sollte mindestens 45x45 sein, um den richtigen Benutzer Tap evert zu erhalten. Verwenden Sie den Knopfeinsatz, um das Bild der Schaltfläche zu platzieren und halten Sie den Rahmen 45x45 oder größer –

+0

@ aman.sood Thx! – jxdwinter

Antwort

0

Ich habe seit langem von diesem Problem geplagt, jetzt eine Lösung finden. Der Grund für dieses Problem ist, dass der Stamm-Controller eine Geste Pop-Operation ausführt, tritt das oben beschriebene Problem auf. Die Problemumgehung besteht darin, das Gesten-Popup auf dem Stamm-Controller zu deaktivieren und das Gesten-Popup auf dem Nicht-Stamm-Controller zu öffnen.

/// 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) 
} 
Verwandte Themen