发生故障当我pushViewController时

时间:2017-04-11 02:25:53

标签: ios objective-c pushviewcontroller

最近,当我将pushConController推送到下一个viewController时,出现了一个奇怪的问题。 为什么我认为这是一个奇怪的问题?因为它并不总是出现(发生的概率很低)。当它出现时,下一个viewController只在屏幕上显示其导航栏,我仍然可以看到rootViewController,但触摸它没有反应(PopGesture有效)。希望得到你的帮助,非常感谢。

enter image description here

#pragram mark - method of pushing   
- (void)clickToAccout {

    if (![self countTotalSelectedNumber]) {
        [SVProgressHUD showInfoWithStatus:@"没有被选择的商品"];
        return;
    }

    CSCreatOrderViewController *creatOrderVC = [[CSCreatOrderViewController alloc] init];
    creatOrderVC.totalPrice = [self countTotalPrice];
    creatOrderVC.goods = [self selectedGoods];

    [self.navigationController pushViewController:creatOrderVC animated:YES];
}

#pragma mark - chlid class of navgationController

- (void)viewDidLoad {
    [super viewDidLoad];

    self.navigationBar.tintColor = [UIColor whiteColor];
}

- (UIStatusBarStyle)preferredStatusBarStyle {
    return _barStyle;
}

- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated{
    if (self.viewControllers.count > 0) {
        viewController.hidesBottomBarWhenPushed = YES;
        [SVProgressHUD dismiss];
    }

    [super pushViewController:viewController animated:animated];
}

- (UIViewController *)popViewControllerAnimated:(BOOL)animated {
    [SVProgressHUD dismiss];

    return [super popViewControllerAnimated:animated];
}

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


#pragma mark - tabBarController

- (void)viewDidLoad {
    [super viewDidLoad];

    CSTabBar *tabBar = [[CSTabBar alloc] init];
    [self setValue:tabBar forKey:@"tabBar"];

    [self.tabBar setTintColor:[UIColor cz_colorWithHex:0Xec5151]];

    [self addChildViewControllerWithTitle:@"首页" imageName:@"home" controllerName:@"CSHomeViewController"];
    [self addChildViewControllerWithTitle:@"分类" imageName:@"classify" controllerName:@"CSClassifyViewController"];
    [self addChildViewControllerWithTitle:@"查询" imageName:@"search" controllerName:@"CSSearchViewController"];
    [self addChildViewControllerWithTitle:@"购物车" imageName:@"cart" controllerName:@"CSShoppingCartViewController"];
    [self addChildViewControllerWithTitle:@"我的" imageName:@"mine" controllerName:@"CSMineViewController"];

    self.selectedIndex = 0;
}

- (void)addChildViewControllerWithTitle:(NSString *)title imageName:(NSString *)imageName controllerName:(NSString *)controllerName {

    Class cls = NSClassFromString(controllerName);

    UIViewController *vc = [[cls alloc] init];
    vc.title = title;
    [vc.tabBarItem setImage:[UIImage imageNamed:[NSString stringWithFormat:@"%@",imageName]]];
    [vc.tabBarItem setSelectedImage:[UIImage imageNamed:[NSString stringWithFormat:@"%@_selected",imageName]]];
    vc.tabBarItem.title = title;

    CSNavigationController *nav = [[CSNavigationController alloc] initWithRootViewController:vc];
    [self addChildViewController:nav];
}


#pragma mark - base viewController
- (void)viewDidLoad {
    [super viewDidLoad];

    self.view.backgroundColor = [UIColor whiteColor];

    [self setupNavItem];

    self.navigationController.interactivePopGestureRecognizer.enabled = YES;
    self.navigationController.interactivePopGestureRecognizer.delegate = self;

    _indciatorView = [[CSIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];

    UIWindow *keyW = [UIApplication sharedApplication].keyWindow;
    [keyW addSubview:_indciatorView];

    [_indciatorView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.center.equalTo(keyW);
    }];
}


- (void)setupNavItem {

    UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 40, 40)];
    button.imageEdgeInsets = UIEdgeInsetsMake(9, 0, 9, 29);
    [button setImage:[UIImage imageNamed:@"left"] forState:UIControlStateNormal];
    [button addTarget:self action:@selector(clickToDismiss) forControlEvents:UIControlEventTouchUpInside];

    self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:button];
}

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

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
}

2 个答案:

答案 0 :(得分:0)

我认为你应该改变

[super pushViewController:viewController animated:animated];

[self.navigationController pushViewController:viewController animated:animated];

弹出时也一样

[super popViewControllerAnimated:animated];

[self.navigationController popViewControllerAnimated:animated];

答案 1 :(得分:0)

我清除Xcode的缓存,这种情况不会出现。也许我导入第三个lib之前导致了这种情况。但就像我问的那样,它并不总是出现(发生概率很低)。所以,希望它一直很好。