2010-05-01 7 views
2

Comment puis-je obtenir le nom de [touch view] dans l'événement touchesbegan. Donc si c'était UIView * aaaaaview j'obtiendrais aaaaaview comme le retour; Merci, nonononom de UIView touché

+0

Je m curieux de ce que vous utilisez pour cela? – blindjesse

Répondre

1

Le paramètre touches est un ensemble de UITouch instances, qui ont une view propriété correspondant:

La valeur de la propriété est l'objet de vue dans lequel le contact a eu lieu à l'origine.

UIView s ne disposent pas d'un nom spécifique, mais vous pouvez vérifier uniquement leur identité, i.e. .:

if([touch view] == aaaview) {} 

ou utiliser - (BOOL)isEqual:.

Vous pouvez également utiliser la place propriété tag pour leur donner des identités significatives:

enum MyViews { 
    AaaView, 
    // ... 
}; 

aaaview.tag = AaaView; 

// ... 
if([touch view].tag == AaaView) {} 

Si vous avez vraiment besoin de noms pour une raison quelconque, ne sont pas mentionnés dans la question, vous pouvez sous-classe UIView et présenter une propriété de nom.

+0

Comment obtenir le nom de la vue dans laquelle le contact est apparu à l'origine – 123hal321

+2

Comme l'expliquent gf et Frank, la vue n'a pas * de * nom. Vous pouvez obtenir le nom de la classe, mais le nom de la variable que vous utilisez lorsque vous codez l'application n'existe pas dans le code compilé. Les noms de variables ne sont qu'une aide pour nous pendant que nous programmons. Si vous voulez juste identifier les vues, le moyen le plus rapide est d'utiliser la propriété tag, où vous pouvez stocker et lire un entier. – Felixyz

3

"UIView * aaaaaView" fait simplement référence à une place en mémoire. Donc, si vous aviez

UIView *aView; 
UIView *anotherView; 
aView = anotherView; 

et l'utilisateur a touché un UIView, serait le nom de la vue soit « aView » ou « anotherView »? En particulier, un UIView n'a aucune connaissance du nom de la variable que vous utilisez pour le stocker.

Je pense que vous allez devoir initialiser un nom de mappage NSDictionary à UIViews.

Quelque chose dans votre -viewDidLoad comme ça, peut-être:

yourDictionary = [[NSDictionary alloc] initWithObjectsAndKeys: 
          @"aaaaaView", aaaaaView, @"viewTwo", viewTwo, nil]; 

puis dans votre événement, vous pouvez dire

NSString *viewName = (NSString *) [yourDictionary objectForKey: [touch view]]; 
+0

'-initWithObjectsAndKeys:' doit être terminé par 'nil'. – kennytm

+0

@KennyTM merci; modifié. –

1

Ou peut-être quelque chose comme ceci:

if ([viewController.nibName isEqualToString:@"aaaaView"])