Comment faire pour Annuler le Défilement dans UIScrollView
- Je utiliser UIScrollView de faire de grande taille (supérieure à 320px) de l'INTERFACE utilisateur de l'iPhone.
J'ai fait une instance de UIScrollView et ajouté des sous-vues sur elle.
Le problème est que je veux activer le défilement uniquement lorsque l'utilisateur touche l'extérieur du sous-vues,
arrêter le défilement lorsque l'utilisateur touche l'un des sous-vues.
J'ai lu des documents et essayé de trouver des échantillons mais je ne peux pas trouver un bon indice.
Si vous avez une idée, merci de m'aider.
Hanson: Pourquoi avez-vous retiré de l'iPhone et de UIScrollView à partir des tags? Ceux sont les bonnes balises - cacao-touch peut être ajouté, mais ne devrait pas rester seul ici.
Je n'ai pas supprimer ou modifier ces balises 🙁
Parce que, quand j'ai fait que modifier, pollution de l'étiquette de l'espace avec des noms de classes et de la redondance de l'information n'était pas une bonne idée. Il n'est pas toujours, j'ai simplement abandonné sur la fixation de la merde.
Je n'ai pas supprimer ou modifier ces balises 🙁
Parce que, quand j'ai fait que modifier, pollution de l'étiquette de l'espace avec des noms de classes et de la redondance de l'information n'était pas une bonne idée. Il n'est pas toujours, j'ai simplement abandonné sur la fixation de la merde.
OriginalL'auteur fish potato | 2008-12-20
Vous devez vous connecter pour publier un commentaire.
Si vous voulez détecter touche à l'intérieur des sous-vues de la UIScrollView, vous aurez à la sous-classe UIScrollView et remplacer le
touchesShouldBegin
ettouchesShouldCancelInContentView
méthodes qui sont spécifiquement créée à cet effet.Autre que cela, il n'y a aucun moyen que vous pouvez identifier les touches dans la sous-vues comme UIScrollView tend à traiter toutes les touches de lui-même et de ne pas les transmettre à ses sous-vues.
Le meilleur de tous.
Tu fais ça dans une sous-classe sur UIScrollView? Les méthodes seront appelés alors seulement. Ainsi, au lieu de votre UIViewController à l'aide d'une UIView que son point de vue, il convient d'utiliser une sous-classe de UIScrollView comme le point de vue
Oui, j'ai essayé ceci dans une sous-classe de UIScrollView. J'ai eu quelques problème dans mon œuvre(seulement primordial touchesBegan...), j'ai donc continuer à essayer de trouver la raison pour laquelle touchesShouldBegin méthode n'a jamais été appelé.
J'ai eu le même problème. Pour moi, c'était en raison de la sous-sous-vue (UIImageView) de ne pas avoir la userInteractionEnabled définie sur OUI.
Cette réponse est fausse, ne devrait pas être accepté de répondre. Vous N'avez PAS à sous-classe UIScrollView à tous. Il y a un bug dans UIScrollView qui rompt UIViews - si vous fixez votre UIView, toutes les touches fonctionnent parfaitement (ils abandonnent grâce à la UIViewController) ET la scrollview continue de fonctionner comme prévu. Le secret est de mettre en nextResponder correctement dans la sous-classe UIView quand Apple accidentellement supprime
OriginalL'auteur
UIScrollView a un scrollEnabled propriété qui permet de désactiver le défilement par programmation. Il dispose également d'un délégué (UIScrollViewDelegate) qui vous permet de voir les événements comme le défilement de début/fin. Semble que vous devriez être en mesure de faire cuire quelque chose avec ces options combinées, d'une certaine façon.
C'est la meilleure solution, @Stephen: vous êtes bon 🙂
Belle réponse, vague, mais suffisant pour commencer. +1
C'est la bonne solution.
OriginalL'auteur
La propriété que vous êtes vraiment intéressé par -- et je suis en train de tester ce moment, car j'ai le même problème que vous ne -- est
canCancelContentTouches
.Si cela ne vous donne pas les résultats que vous voulez, la sous-classe UIScrollView et remplacer le
touchesShouldBegin:withEvent:inContentView
méthode, qui est ce que l'on a accepté de répondre suggère.OriginalL'auteur
La façon la plus simple de le faire est de définir
delayContentTouches
àNO
pour la scrollview. De cette façon, le comportement par défaut est définie de sorte que tout ce qui est un UIControl va passer de la touche sur le contrôle immédiatement andeverything d'autre de défilement.OriginalL'auteur
Vous pouvez également sous-classe UIScrollViewController et remplacer le touchesBegan, touchesMoved et touchesEnded méthodes. Si votre application n'appelle jamais la super-classe de mise en œuvre, il n'y aura pas de défilement.
OriginalL'auteur