J'ai une application très complexe avec beaucoup de vues empilées contenant de nombreux boutons, des zones de dessin et une autre manipulation sur mesure. J'affiche une vue d'aide glagible qui peut être sur toutes les autres vues. J'ai besoin de rejeter cette vue si l'utilisateur tapote n'importe où en dehors de la vue Helper. J'ai essayé d'utiliser plusieurs uiwindows et d'ajouter des reconnaissants de geste à l'UIWindow. p>
3 Réponses :
Vous pouvez vérifier la vue en étant touchée en traversant les touches et en regardant la propriété .Voir la propriété du toucher. Il reflète la vue d'où la vue provient réellement.
supposant que vous gardez une référence à votre vue (via une iboutlet ou autrement) à votre avis appelé "MyView" les travaux ci-dessous. P>
votre fichier .m. La fonction Touxbegan: la fonction est déclenchée chaque fois que l'utilisateur touche un doigt vers le bas. Nous faisons boucle à travers les touches de voir si la vue d'origine du toucher n'est pas égale à "MyView". Cette comparaison pourrait également être effectuée via la vérification de la classe, de la balise ou de toute autre propriété que vous utilisez pour identifier votre vue. Exemples donnés ci-dessous. P> ou en cas d'utilisation d'une étiquette: p>
Où dois-je mettre ça? Et rappelez-vous que la plupart des sous-espoirs ont leur propre contact ont commencé à mettre en œuvre.
Vous gardez directement celui-ci dans un fichier .m et remplacez votre vue.
Désolé de dire que je ne comprends pas ce que votre idée est.
Un bouton facile consiste à ajouter un bouton transparent qui limite est égal aux limites de la SuperView. Et le superview Insérez le bouton transparent sous votre vision de votre assistant.
Le bouton transparent Ajouter un événement de clic pouvant rejeter la vue d'assistance et la touche transparente elle-même. p>
Par exemple: p>
- (void)dismissHelper:(UIButton *)sender { [helperView dismiss]; sender.hidden = YES; // or [sender removeFromSuperview] }
Et si nous voulons interagir avec la vue?
Créer une vue sur la hitterstercept. Cela peut rendre la vue ci-dessous manipulez des événements comme avant.
- (void)dismissIfTouchOutsideInView:(UIView *)view { if (_interceptView != nil) return; _interceptView = [[HitTestInterceptView alloc] initWithFrame:view.bounds]; _interceptView.backgroundColor = [UIColor clearColor]; _interceptView.hitTestInterceptDelegate = self; [view insertSubview:_interceptView belowSubview:self]; } - (BOOL)interceptHitTest:(CGPoint)point withEvent:(UIEvent *)event { dispatch_async(dispatch_get_main_queue(), ^{ // [self dismiss]; }); return YES; }