2010-07-04 2 views
0

Je suis nouveau sur iPhone dev. Mon application crée dynamiquement des boutons, à partir de mon modèle de données. Le modèle n'est pas simplement une liste simple; c'est un arbre. J'ai besoin d'un moyen de corréler un bouton créé à ce modèle de données, de sorte que lorsque le bouton est cliqué, je sais à quelle partie du modèle il correspond.Comment lier un UIButton à mon objet de données? (iPhone/Objective C)

Sous Windows, la plupart des contrôles de l'interface utilisateur disposent d'un champ "tag" dans lequel vous pouvez placer des données personnalisées. En utilisant un modèle similaire, ce que je voudrais faire sur l'iPhone est la suivante:

- (void)createMyButton:(MyModel*)foo 
{ 
    UIButton* button = <insert creation code here> 
    [button addTarget:self action:@selector(handleCreatedButtonTouch:) ...]; 
    button.tag = foo; 
} 

- (void)handleCreatedButtonTouch:(id)sender 
{ 
    UIButton* button = (UIButton*)sender; 
    MyModel* foo = (MyModel*)(button.tag); 
    [foo userTouchedMyButton]; 
} 

Je ne trouve aucune mention d'un tel champ dans la documentation Apple. Comment faites-vous les gourous de l'iPhone cela? Encore une fois, je n'ai aucun moyen simple d'indexer dans mon modèle de données, et faire une énumération sur l'ensemble du modèle de données pour trouver une correspondance semble très faux.

Répondre

1

Andrew,

éléments de l'interface utilisateur de l'iPhone SDK ont une propriété tag semblable à ce que vous décrivez. Si vous cherchez à utiliser button.tag, vous pouvez le faire dès la sortie de la boîte.

La seule modification à votre pseudo-code serait dans votre méthode handleCreatedButtonTouch:. la ligne:

MyModel* foo = (MyModel *)(button.tag); 

tenterait de lancer la propriété tag à un objet MyModel. Vous auriez probablement eu envie de créer un initialiseur dans MyModel à qui gère la recherche, tels que:

MyModel *foo = [[MyModel alloc] initFromButtonWithTag:[sender tag]]; 

Hope this helps.

+0

Cela fonctionne, merci! J'ai encore regardé la documentation et je la trouve sous la documentation de MacOS X pour "NSControl" mais pas pour "UIControl" de l'iPhone. Qu'est-ce qui se passe avec ça? La documentation est-elle désactivée? – AndrewS

+0

Parfois, vous devez creuser assez profondément dans la documentation pour trouver ce que vous cherchez. 'UIButton' hérite de' UIControl', et 'UIControl' hérite de' UIView', et 'UIView' a la propriété' tag'. Vous pouvez le visualiser comme suit: 'UIControl: UIView: UIResponder: NSObject', où' UIView' supporte 'tag'. –

+0

pourquoi créer un nouvel objet? Et si on veut simplement passer dans un objet existant? – user102008

Questions connexes