TableViewController

NigokiNigoki Membre
20:08 modifié dans API UIKit #1
Hello  :)

Je suis débutant en programmation iphone et parfois j'ai l'impression de me compliqué les choses  :why?:

J'ai commencé mon application du plus bas possible window-Based Application pour bien comprendre depuis le début. Après 2semaines maintenant j'enchaine les vue simple sans problème jusqu'à  ce que je doivent passer par une UITableView.

Pas bien sorcier vous me dirait, cependant dans mon XIB si je met uniquement une tableView avec une navBar en haut et une ToolBar en bas, lors de l'exécution, seul ma TableView s'affiche (correctement remplie cela dit) avec un blanc à  la place de mes barres.
Pour contourner ce problème, je suis donc partie d'un UIView ou j'ai pu mettre mes barres et ensuite la UITableView par dessus entre mes barres.
Maintenant tout s'affiche correctement, mon UIViewController contient donc un UITableViewController qui s'occupe de ma UITableView. Cependant maintenant sur le clic d'une cellule de ma TableView (didSelectRowAtIndexPath) le traditionnel (pushViewController) ne fonctionne pas. J'essaie alors de charger ma vue fille comme je l'ai fait jusqu'à  présent avec des addSubView mais idem.

Je vois plus trop comment me sortir de cette impasse. Avoir une TableView avec une NavBar et une Toolbar sans partir d'une Navigation-Based Application ?

Ou Sinon, comment avec une NAvigation-Based application, faire des vue simple avec des TexteField comme login/mdp de la meme maniere que l'application de contact native à  l'iphone ?

Merci d'avance, je suis paumé  o:)

Réponses

  • Eric P.Eric P. Membre
    20:08 modifié #2
    Bonjour,

    Dans tous les exemples fournis, il n'y a pas un cas approchant.

    Après il faut montrer un peu de code pour avoir une réponse.

    Eric
  • NigokiNigoki Membre
    20:08 modifié #3
    Oui bien sur, je manque à  mes devoirs  :o

    Voici le résultat final de mon XIB :

    Picture-6.png

    J'ai d'abord essayé de remplir la méthode didSelectRowAtIndexPath de mon TableViewController comme ceci. (pour afficher donc le détails d'un contact)

    <br />ContactDetailsViewController *detailsController = [[ContactDetailsViewController alloc] initWithNibName:@&quot;ContactDetailsView&quot; bundle:nil];<br />	detailsController.contactName = [self.data objectAtIndex:indexPath.row];<br />	[self.navigationController pushViewController:detailsController animated:YES];<br />
    


    Avec un NSLog je peux voir que la fonction est bien exécuté mais rien ne se passe. Je pense que c'est parce que mon TableViewController n'est pas le first responder.

    Mon application est gérée par un RootViewController (UIViewController) qui se charge de charger les Vues en mémoire et de les afficher, comme pour ma vue de la liste des contacts :

    <br />-(void)loadContactViewController {<br /><br />	ContactViewController *viewController = [[ContactViewController alloc] initWithNibName:@&quot;ContactView&quot; bundle:nil];<br />	viewController.rootViewController = self;<br />	self.contactViewController = viewController;<br />	[viewController release];<br />	<br />}<br /><br />-(IBAction)goContact {<br /><br />	[self loadContactViewController];<br />	[viewToRemove.view removeFromSuperview];<br />	[self.view addSubview:contactViewController.view];<br />}<br />
    


    et le changement de vue sur clic de mes UIBarItemButton se fait par cette appel :

    <br />-(IBAction)goContact:(id)sender {<br /><br />	self.rootViewController.viewToRemove = self;<br />	[self.rootViewController goContact];<br />}<br />
    


    Pour mon problème donc, au chargement de ma vue ContactView, je charge un TableViewController qui génére les Riri, Fifi et LouLou

    <br />- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {<br />&nbsp; &nbsp; if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {<br />&nbsp; &nbsp; &nbsp;  <br />		ContactTableViewController *viewController = [[ContactTableViewController alloc] init];<br />		viewController.contactViewController = self;<br />		self.contactTableViewController = viewController;<br />		[viewController release];<br />&nbsp; &nbsp; }<br />&nbsp; &nbsp; return self;<br />}<br />
    


    La suppression d'une ligne par la navBar marche sans problème mais pour le clic sur une cellule, rien ne se passe. Rien dans la console, a part les NSLog quand ils y sont.

    Sur le net j'ai croisé souvent une histoire de Delegate pour ce problème. Un truc genre <UITableViewDelegate> mais j'ai essayé un peu partout sans résultat non plus.

    J'ai également éssayé

    dans mon TableViewController :
    <br />- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {<br /><br />	[self.contactViewController goDetailsContact:(NSString *)[self.data objectAtIndex:indexPath.row]];<br />	<br />}<br />
    


    dans le UIViewController père du TableView :

    <br />-(void)goDetailsContact:(NSString *)name {<br /><br />	self.rootViewController.viewToRemove = self;<br />	[self.rootViewController goDetailsContact:name];<br />}<br />
    


    Et dans le rootViewController :

    <br />-(void)loadContactDetailsViewController:(NSString *)name {<br /><br />	ContactDetailsViewController *viewController = [[ContactDetailsViewController alloc] initWithNibName:@&quot;ContactDetailsView&quot; bundle:nil];<br />	viewController.rootViewController = self;<br />	viewController.contactName = name;<br />	self.contactDetailsViewController = viewController;<br />	[viewController release];<br />}<br />
    


    Mais idem, rien ne se passe.
  • Eric P.Eric P. Membre
    20:08 modifié #4
    Le delegate se règle dans IB.

    Eric
Connectez-vous ou Inscrivez-vous pour répondre.