Vous pouvez passer outre
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
shouldReceiveTouch:(UITouch *)touch
pour mieux contrôler quand le PageViewController doit recevoir le toucher ou non. Consultez la section "Empêcher les reconnaisseurs de gestes d'analyser les touchers" dans le document intitulé Dev API Reconnaisseurs de gestes
Ma solution ressemble à ceci dans le RootViewController pour le UIPageViewController :
Dans viewDidLoad :
//EDITED Need to take care of all gestureRecogizers. Got a bug when only setting the delegate for Tap
for (UIGestureRecognizer *gR in self.view.gestureRecognizers) {
gR.delegate = self;
}
L'annulation :
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
//Touch gestures below top bar should not make the page turn.
//EDITED Check for only Tap here instead.
if ([gestureRecognizer isKindOfClass:[UITapGestureRecognizer class]]) {
CGPoint touchPoint = [touch locationInView:self.view];
if (touchPoint.y > 40) {
return NO;
}
else if (touchPoint.x > 50 && touchPoint.x < 430) {//Let the buttons in the middle of the top bar receive the touch
return NO;
}
}
return YES;
}
Et n'oubliez pas de définir le RootViewController comme UIGestureRecognizerDelegate.
(Pour info, je suis seulement en mode paysage.)
EDIT - Le code ci-dessus a été traduit en Swift 2 :
Dans viewDidLoad :
for gr in self.view.gestureRecognizers! {
gr.delegate = self
}
Faire en sorte que le contrôleur de la vue de la page hérite UIGestureRecognizerDelegate
puis ajoutez :
func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldReceiveTouch touch: UITouch) -> Bool {
if let _ = gestureRecognizer as? UITapGestureRecognizer {
let touchPoint = touch .locationInView(self.view)
if (touchPoint.y > 40 ){
return false
}else{
return true
}
}
return true
}
0 votes
J'ai également travaillé sur une application qui utilise PageViewController ... et je cherche un moyen de changer les pages de manière programmatique ... pouvez-vous m'aider un peu sur ce point ?
2 votes
Sûr. Pour changer une page de manière programmatique, vous devez faire ceci :
NSArray *viewControllers = [NSArray arrayWithObject:pageIWantToTurnTo];
puis[pageViewController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:NULL];
0 votes
Y a-t-il un exemple où l'achèvement n'est pas NULL ?
0 votes
Je ne comprends pas. Vous cherchez le produit final ?
0 votes
@Rich86man Pouvez-vous me dire comment afficher plus d'un contrôleur de vue dans un contrôleur de vue de page. J'utilise UIPageViewController, mais il répète les mêmes vues. Pouvez-vous m'aider à résoudre ce problème ?
0 votes
Voici ma question avec la spécification " stackoverflow.com/questions/13415198/ ".
0 votes
Pour information - sous iOS 6.x, cela ne semble pas être un problème. J'ai des boutons sur le côté droit de mon UIPageViewController et ils reçoivent le tapotement sans problème. Sous iOS 5.1.1, des utilisateurs se plaignent que le fait d'appuyer sur le bouton de droite fait tourner la page, exactement comme le problème décrit ici.
0 votes
This class is generally used as-is, but can also be subclassed.
de : developer.apple.com/documentation/uikit/uipageviewcontroller