afficher un modal depuis une tableview cell

septembre 2012 modifié dans Apple Developer Programs #1
bonjour,

j'ai programmé une tableview informatiquement, et non pas par un fichier interface ,

et pour chaque cell , je voudrais afficher le meme modalVC (ce qui changera c'est son contenu).

Pour ca j'ai pensé a utiliser ce code , pour recuperer le nom des cell


<br />
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath<br />
{<br />
  <br />
	cell = [tableView cellForRowAtIndexPath:indexPath];<br />
   NSString *stringVariable = cell.textLabel.text;<br />
  <br />
  <br />
	if (stringVariable == @&quot;quelquechose&quot;) {<br />
	  //j&#39;affiche le modal VC avec le  texte du stringVaribale.<br />
<br />
	}<br />
}<br />




je veux donc ouvrir le meme modal VC , seul son nom changera dans l'en tete , ou dans la navigation bar (et correspond au texte de la cell sélectionnée).

Merci pour votre aide! (si c'est pas assez clair , dites le !)

Réponses

  • AliGatorAliGator Membre, Modérateur
    Ce n'est pas du tout MVC comme façon de faire.



    Tu dois te baser sur ton modèle pour récupérer le texte des cellules putôt.

    C'est à  dire que dans ton implémentation de "tableView:cellForRowAtIndexPath:" tu récupères certainement ton objet modèle pour remplir ton champ texte, par exemple avec un truc du genre :
    -(UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath<br />
    {<br />
       UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:...];<br />
       if (&#33;cell)<br />
       {<br />
          // create cell<br />
       }<br />
       MyObject* obj = [modelObjectsArray objectAtIndex:indexPath.row];<br />
       cell.textLabel.text = obj.someStringProperty;<br />
       return cell;<br />
    }
    
    Alors de la même manière, pour récupérer le texte à  utiliser pour ton titre du VC tu vas aller le chercher dans ton modèle :
    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath<br />
    {<br />
       MyObject* obj = [modelObjectsArray objectAtIndex:indexPath.row];<br />
       NSString* text = obj.someStringProperty;<br />
       ...<br />
    }
    
    Bon en plus de cela (je t'invite fortement à  te renseigner sur le MVC et comment il est utilisé dans Cocoa, car il est utilisé partout), j'espère que tu es au courant qu'il ne faut surtout pas faire de "==" sur les NSString, donc que ton "if" que tu as mis dans ton code ci-dessus ne va jamais marcher ! D'une part il faut utiliser isEqualToString: pour la comparaison entre deux NSStrings, mais en plus là  encore ce n'est pas une façon super logique de faire. Tu devrais plutôt te baser là  encore sur une propriété de ton modèle pour faire cela, genre te créer une propriété obj.showViewController sur tes objets modèle ou un truc du genre en fonction de tes besoins, plutôt que de tester la valeur du texte.
  • Oui , le == pour la comparaison entre deux NSString etait une erreur de ma part , merci pour ta reponse !
Connectez-vous ou Inscrivez-vous pour répondre.