2010-06-26 3 views
-1

Les UIView qui ne gèrent pas leurs événements les font passer dans la chaîne. Par défaut, cela les passe à leur View parent, et s'il n'est pas géré (en fin de compte) à leur parent UIViewController.Correction de UIScrollView pour passer les événements vers le haut de la chaîne plutôt que vers le bas

UIScrollView brise ce (il y a beaucoup de questions sur le SO, les variations sur le thème de « pourquoi mon application cesse de fonctionner une fois que j'ajouter une UIScrollView?)

UISV décide si l'événement est pour lui-même, et si non , il passe le bas (dans ses sous-vues), si elles ne gèrent pas l'événement, UISV le jette juste le bug

Dans ce cas, il est censé les rejeter dans sa propre vue parente. - et finalement parent UIVC AFAICT, c'est pourquoi tant de gens se confondent: ça ne fonctionne pas comme documenté (NB: comme vues sont documentées; UISV est simplement "non documenté" sur ce sujet - il ne déclare pas ce qu'il vise à faire dans cette situation).

Alors ... y a-t-il une solution facile pour ce bug? Y a-t-il une catégorie que je pourrais écrire qui corrigerait UISV en général et m'éviterait de devoir créer de "fausses" sous-classes UIView qui existent uniquement pour capturer des événements et les remettre où elles sont supposées aller? (Qui fait pour le code sujettes aux bugs)

En particulier, à partir de documents d'Apple:

Si les feux de temps sans un changement significatif de la situation, la vue de défilement envoie le suivi des événements à la sous-vue touché du contenu vue. Si l'utilisateur tire son doigt suffisamment loin avant que la minuterie ne se soit écoulée, la vue déroulante annule tout suivi dans la sous-vue et effectue le défilement lui-même.

... si je pouvais passer outre que « si les feux de minuterie » méthode, et la mettre en œuvre, je crois que je pourrais corriger toutes mes instances UISV correctement,.

Mais: - serait considérer cette pomme « en utilisant une API privée » (leur description de « privée » est absurde en termes de programmation normale, et je ne peux pas comprendre ce qu'ils font et ne veut pas dire par elle) - Est-ce que quelqu'un sait ce que cette méthode est, ou un bon moyen de s'y retrouver? (Débogage des classes ObjC compilées pour trouver les noms de symboles, peut-être?)

Répondre

0

que j'ai trouvé une réponse partielle, c'est exact, mais pas à 100% utilisable :(.

iPhone OS 4.0 vous permet d'ajouter à distance auditeurs à une vue donnée, via la classe UIGestureRecognizer. C'est super, et fonctionne parfaitement.

le seul problème est ... il ne fonctionnera pas sur les iPhones 3.x et iPod Touch.

(mais si vous 'ciblez 4.0 et ci-dessus, c'est un moyen facile d'avancer)

EDIT:

Sur OS 3.x, je créé une sous-classe UIView personnalisée qui a des propriétés supplémentaires:

NSObject *objectToDelegateToOnTouch; 
id touchSourceIdentifier; 

Chaque fois qu'un contact arrive, le point de vue envoie le message tactile directement au objectToDelegateToOnTouch, mais avec le paramètre supplémentaire du touchSourceIdentifier.Ainsi, chaque fois que vous touchez, vous savez d'où il vient (vous pouvez utiliser un objet, ou une chaîne, ou tout ce que vous voulez comme "identifiant").

Questions connexes