2010-09-01 11 views
1

J'ai donc sous-classé UIViewController et dans la plume j'ai un UIView, et dans celui-ci une tableview. Je crois comprendre que UIViewController et UIView sont des sous-classes de UIResponder, donc ils devraient recevoir la méthode - (void) touchesBegan: (NSSet *) avecEvent: (UIEvent *) événement .Sous-classe UIViewController ne recevant pas de touchesBegan iphone ipad

Cependant, ce n'est pas le cas, et ma sous-classe de contrôleur de vue ne reçoit pas cette méthode. J'aimerais vraiment ne pas sous-classer l'UIView, si tout va bien.

Je suis en train de mettre en œuvre this, mais mon

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    [textfield resignFirstResponder]; 
} 

n'est pas appelé.

Répondre

0

Malheureusement, touchesBegan ne prend place que dans la vue, bien que UIViewController soit une sous-classe de UIReponder. Les docs pour touchesBegan disent cela.

indique au récepteur quand un ou plusieurs doigts touchent le bas dans une vue ou fenêtre.

+6

touchesBegan est également pris en charge dans un UIViewController. Je l'utilise intensivement dans une de mes applications pour permettre à l'utilisateur de réorganiser les vues dans le viewcontroller. – progrmr

+0

UIViewController participe à la chaîne du répondeur et recevra donc les touchBegan comme le ferait UIView. – Boon

+0

UIViewController est inséré dans la chaîne du répondeur dans iOS 3 et après. – bbrame

0

L'UIView dont vous parlez est celui que vous avez créé, ou utilisez-vous celui fourni avec le UIViewController? En outre, si le clic se produit sur UITableView, vous devrez sous-classer cela pour informer votre UIViewController qu'un clic s'est produit sur la tableview ...

1

Si vous changez la vue de votre VC en UIControl (UIControl est le superclasse d'un UIView) dans IB, vous pouvez lui affecter une IBAction. Vous pouvez avoir votre textfield resignFirstResponder dans cette action.

+0

Un UIView * est * un UIControl, pas besoin de changer quoi que ce soit. Vous pouvez affecter des actions à UIViews. – progrmr

+1

Pas sans sous-classer un UIView - que l'affiche ne veut pas. Si vous le modifiez en UIControl, vous pouvez accéder aux événements, de sorte que vous pouvez le définir sur une touche touchDown ou sur TouchUpInside dans IB sans avoir à utiliser le code. J'ai déjà fait ça. Un UIView ne répertorie pas les événements tactiles. – MishieMoo

4

Cela dépend de l'endroit où vous touchez. Si vous touchez dans la vue de la table, les touches sont envoyées à la vue de table, pas au contrôleur de vue. Si vous touchez un champ de texte qui est à votre vue, les touches sont envoyées à UITextField lui-même. Si vous touchez à l'extérieur de la vue de table, en dehors du champ de texte mais dans la vue des contrôleurs de vue, le contrôleur de vue doit obtenir ces touches.