[Résolu] Un bon tuto sur les UITableView ?

13»

Réponses

  • Je t'avais dit :p tu nous as pas montrer le .h hannnnnn 


    Bon bah après la confirmation d'Ali tu pourra enlever ton code vu que l'erreur ne vient pas de la et vu que ça t'arrange :)


  • septembre 2014 modifié #63

    Par contre j'ai besoin de ce code en fait :



    dispatch_async(dispatch_get_main_queue(), ^{
    [self.tableView reloadData];
    });

    En lieu et place du reloadData, comme les choses ont changé j'ai besoin de l'appeler.


  • A oui par contre, c'est à  quel endroit que l'on set le titre du UINavigation ? Parce que dans le AppDelegate : rien.


  • Comment ça rien ???? tu utilise la méthode setTitle : 



    [monNavigation setTitle:@WhateverTitle];
  • Oui, exactement.


  • Et ça ne fait rien ?


  • Bon, alors j'ai (encore) un problème. Outre le titre du UINavigationBar qui ne s'affiche pas j'ai un gros soucis au niveau de la transition entre la UITableView et la UIViewController que j'utilise comme vue de détail.


     


    Alors en gros, voici mon code du UITableViewController (qui était vide dans mon code précédent) :



    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
    {
    ViewControllerDetail *detailView = [[ViewControllerDetail alloc] initWithStuff:[self.myArray objectAtIndex:[indexPath row]]];

    [[self navigationController] pushViewController:detailView animated:YES];
    }

    Ca, a priori, c'est bon. En tout cas je récupère bien tous les détails de mon objet.


     


    Là  où ça déconne, c'est au niveau de la transition. Quand on click sur un objet de la UITableViewController, la UIViewControllerDetail viens par dessus et uniquement après la UITableViewController disparait. Moche! Et l'inverse ce produit quand je click sur le bouton back.


     


    Une petite idée ?


  • AliGatorAliGator Membre, Modérateur

    A oui par contre, c'est à  quel endroit que l'on set le titre du UINavigation ? Parce que dans le AppDelegate : rien.

    La propriété title doit être affectée sur le UIViewController.
    Le UINavigationController demande son titre au UIViewController qu'il est en train d'afficher, et c'est ce titre là  qu'il affiche en haut de la barre, (et non pas la valeur de sa propre propriété title à  lui). Ce qui est logique en fait, c'est au ViewController affiché de fournir le titre de l'écran courant.
    C'est d'ailleurs un principe similaire pour le titre du backButtonItem qui est directement déduit du "title" du ViewController précédent.
  • Ok, je vois. Par contre, une idée de la saccade dans la transition du UITableView au UIControllerView qui sert de vue détail ?


    Je pensais que ça pouvais venir de l'init mal placé, mais apparemment pas.




  • Par contre j'ai besoin de ce code en fait :



    dispatch_async(dispatch_get_main_queue(), ^{
    [self.tableView reloadData];
    });

    En lieu et place du reloadData, comme les choses ont changé j'ai besoin de l'appeler.




     


    Je sais pas si Ali va voir ce message mais j'aimerais bien avoir plus de précisions sur le pourquoi de la chose.


     


    Sinon, ça m'a donné une idée de l'utiliser pour récupérer les préférences de l'utilisateur sur un champ de texte. Pour ceux qui ont vu mes anciens posts sur le sujet des SettingsBundle et bien cette ligne est une solution. Je ne suis pas encore sur à  100% de son efficacité mais ça règle le problème.


     


    Je m'explique, quand vous récupérez un paramètre au lancement de l'App, il est null. Il est vrai qu'Apple conseille de le setter en dur si nécessaire. Avec cette ligne, il récupère bien la valeur, ce que je trouve quand même beaucoup plus logique, sinon, je ne vois pas l'intérêt d'un champs externe dans les settings général d'un téléphone.


     


    Voilà .


     


    Sinon, si quelqu'un à  une idée pour mon problème d'animation, je suis preneur.

  • Alors en attendant qu'Ali te réponde les méthode UI .. comme UIImage setImageNamed etc ... doivent aussi s'executer sur la main thread


  • septembre 2014 modifié #74

    Oui je savais ça mais je pensais que c'était par défaut... Merci pour l'info.


     


    EDIT : du coup j'ai oublié de montrer le code mais vu ce que tu me dis, je pense que c'est pas une bonne idée :



    dispatch_async(dispatch_get_main_queue(), ^{
    self.url = [NSURL URLWithString:[[NSUserDefaults standardUserDefaults] stringForKey:@id-bundle-settings]];
    });

  • AliGatorAliGator Membre, Modérateur
    Oui pour dispatch sur le main queue car il faut SYSTà‰MATIQUEMENT n'appeler les méthodes relatives à  l'UI UNIQUEMENT sur le mainThread.


    Non pour les NSUserDefaults par contre, ce n'est pas la solution et je ne vois pas le rapport avec un dispatch_async dans ce cas. Sans doute peut être as-tu oublié de faire ton registerDefaults ou un truc dans ce goût là  car c'est pas normal que ça ne marche pas sinon, et l'encapsuler dans le dispatch_async sans trop comprendre pourquoi ne devrait pas spécialement régler le problème, du moins y'a pas de raison (du coup si ça le règle ca ressemble plutôt à  un gros coup de bol)
  • septembre 2014 modifié #76

    Beh si maintenant j'ai compris :)


     


    Tu veux dire un truc de ce genre ?



    NSString *defaultURL = @uneURL;

    self.connectForDatas = [NSURL URLWithString:[[NSUserDefaults standardUserDefaults] stringForKey:@URL]];

    if (self.connectForDatas == nil)
    {
    NSDictionary *appDefaults = [NSDictionary dictionaryWithObjectsAndKeys:
    defaultURL, @URL,
    nil];

    [[NSUserDefaults standardUserDefaults] registerDefaults:appDefaults];

    self.connect = [NSURL URLWithString:defaultURL];
    }

    A la place du registerDefault j'avais un setObject mais j'ai l'impression que dans les deux cas, le résultat est identique... (OK le registerDefault te permet de passer un NSDictionary est donc de setter plusieurs paramètres en même temps).


  • AliGatorAliGator Membre, Modérateur
    Le registerDefault n'enregistre pas les valeurs dans le même domain (et c'est tout l'intérêt).

    (cf le User Defaults Programming Guide pour comprendre l'influence des domaines de NSUserDefaults si tu ne connais pas)
  • Ok, je vais voir ça.


     


    Ali, avant que je vire mon code de la page précédente, est-ce que tu peux me dire si tu as une idée pour mon problème d'affichage quand tu changes de view ?




  • Ali, avant que je vire mon code de la page précédente, est-ce que tu peux me dire si tu as une idée pour mon problème d'affichage quand tu changes de view ?




     


    C'est difficile de t'aider comme ça. Ton code qui affiche le détail est correcte ( enfin tu ne respectes pas certaines conventions mais le problème n'est pas la). Peut être que c'est les animations push sous iOS 7 qui te paraissent moches quand tu les compares à  iOS 6 ou 5 ?


    Est- ce que tu fais un traitement particulier de la vue détail au moment de l'affichage ( viewWillAppear,...) ?

  • septembre 2014 modifié #80

    Je veux bien que tu m'en dises un peu plus sur les conventions que je ne respecte pas Samir. Je voudrais changer ça.


     


    Ensuite, non, c'est vraiment un bug d'affichage (du a un code mal placé, j'en suis sur). J'essaye de faire une capture et je reviens dans quelques minutes.


     


    Pour le code, je pense que tout le code est là  concernant le AppDelegate et le UITableViewController. Concernant ma nouvelle UIViewController que j'utilise pour la vue de détail, elle, j'init tout dans InitWithStuff, méthode perso donc. Rien dans le ViewDidLoad, je devrait peut-être mettre les alloc/init là  dedans ?


     


    Bon je ne sais pas si ça va aider, mais on voit bien que l'image viens sur le UITableView, en fait c'est toute la vue qui viens par dessus :  https://lut.im/uKouYCER/mi06rjj7


  • Tu as plagié Picasso : c'est une oeuvre d'art ton image ! vend la  ;D


     


    Non plus sérieusement c'est vraiment bizarre : l'idéal aurait été que tu prenne une vidéo sur quicktime et tu peux enregistrer qu'un partie de ton écran pour éviter de tout montrer


  • septembre 2014 modifié #82

    Je t'envois un MP pour un lien. (Samir et d'autres je peux aussi, par contre Samir, ma question tiens toujours :) )


     


    (dsl c'est long)


  • Alors comme j'ai déplacé à  plusieurs endroits mes alloc/init de mes objets de la vue de détail et que je ne voulais pas le faire une troisième fois pour rien en les plaçant dans le initWithNib, j'ai tout viré et fais un nouveau test. Surprise, j'ai toujours cette saccade au niveau de la transition entre le UITableViewController et la UIViewController que j'utilise pour la vue de détail.


     


    Pas de warning, pas de logs.


  • Est ce que chaque cellule est identique ? 


     


    Tu fais qqchose dans le prepareforreuse ?


     


    Est ce que ton cell identifier est unique ?


  • Ah et dernière question : t'as pas activé l'autolayout ?


  • septembre 2014 modifié #86

    Oui, je ne crois pas, oui et non :)


     


    Bon sinon la solution était bien moins sexy qu'un problème de code et je songe a partir au monastère quelque temps histoire de faire pénitence. J'ai trouvé la solution, la vue de détail n'avais pas de fond, autrement dis de couleur. Maintenant que le fond est présent, plus d'effet de saccade et ça fonctionne très bien.


     


    Merci pour votre aide  :p


     


    EDIT : ce qui m'as "trompé" c'est que la transition fini, le fond était blanc et non transparent.


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