Avoir un problème pushViewController !! Aidez-moi
-
21-09-2019 - |
Question
tabBarController = [[UITabBarController alloc] init]; //Create a tab bar
view1 = [[View1 alloc] init]; //Create the first view
UINavigationController *navigationController1 = [[UINavigationController alloc] initWithRootViewController:view1];
navigationController1.navigationBar.tintColor =[UIColor blackColor];
view2 = [[View2 alloc] init]; //create the second view
UINavigationController *navigationController2 = [[UINavigationController alloc] initWithRootViewController:view2];
navigationController2.navigationBar.tintColor =[UIColor blackColor];
tabBarController.viewControllers = [NSArray arrayWithObjects:navigationController1, navigationController2,nil];
[window addSubview:tabBarController.view];
[window makeKeyAndVisible];
Le code ci-dessus sont de ma classe appDelegate (applicationDidFinishLaunching). View1 et View2 sont UIViewController. Voilà comment je Originellement mes applications, que les applications comporte deux onglets, (view1 et view2). Le code ci-dessous, mettre en œuvre ce qui se passe dans View1, lorsque le swipe utilisateur gauche ou à droite.
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
NSLog(@"I am in touches began methods");
UITouch *touch = [touches anyObject];
gestureStartPoint = [touch locationInView:self.view];
}
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [touches anyObject];
CGPoint currentPosition = [touch locationInView:self.view];
CGFloat deltaX = fabsf(gestureStartPoint.x - currentPosition.x);
CGFloat deltaY = fabsf(gestureStartPoint.y - currentPosition.y);
if (deltaX >= kMinimumGestureLength && deltaY <= kMaximumVariance) {
//Set Animation Properties
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration: 1];
if(gestureStartPoint.x > currentPosition.x){ //I am trying to move right
ViewControllerTemplate *newView = [[ViewControllerTemplate alloc] initWithNibName:@"ViewControllerTemplate" bundle:nil];
//Transition spin right
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:self.navigationController.view cache:NO];
//Push OnTo NavigationController
[self.navigationController pushViewController:newView animated:YES];
}
else { //I am trying to move left
if([viewDelegate getCurrentViewID] > 0){ //At view 0, should not pop anymore view
//Transition Spin left
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:self.navigationController.view cache:NO];
[self.navigationController popViewControllerAnimated:YES];
}
}
[UIView commitAnimations];
}
}
A peu près, il de dire que lorsque le droit swipe utilisateur, il crée une nouvelle vue (ViewControllerTemplate) et pushViewController, et lorsque le swipe utilisateur gauche, popViewController. Cependant, étant donné que je change d'avis et ne veux pas mettre en œuvre la barre d'onglets. Donc, je change mon code dans applicationDidFinishLaunching dans appDelegate à ces ci-dessous et l'pushViewController en touchesMoved dans le travail d'arrêt View1.m. Je suis sûr qu'il y arriver, mais quand il pushViewController du NewView, rien ne se passe. Je me sens comme quand je pris le UINavigationController, mon avis ne sont pas pousser sur la pile plus correctement. Toute idée pourquoi, et comment y remédier
view1 = [[View1 alloc] init];
[window addSubview:View1.view];
La solution
Si quelqu'un a déjà couru dans le même problème, voici la solution Remplacer ce que j'ai pour applicationDidFinishLaunching () là-bas à cette
view1 = [[View1 alloc] initWithNibName:@"View1" bundle:nil]; //Create the first view
UINavigationController *navigationController1 = [[UINavigationController alloc] initWithRootViewController:view1];
navigationController1.navigationBar.tintColor =[UIColor blackColor];
view1 = navigationController1;
[window addSubview:view1.view];
[window makeKeyAndVisible];