charger une vue perso via interface builder

yodarkyodark Membre
08:02 modifié dans API UIKit #1
Bonjour a tous,

j'ai un petit souci !

J'utilise le code source d'une vue que j'ai trouvé sour le net pour afficher des cartes google map.

Ce code source est composé d'une vue dérivé de UIView et d'un composant MapWebView qui est dérivé de webview.
La UIview charge donc le composant MapWebView le problème est que si j'appelle ma View au lancement de l'application pas de problèmes tout fonctionne.

Cependant, quand j'incorpore dans mon tab bar view via interface builder la view. J'ai une page blanche.
Si je met directement le composant MapWebView il fonctionne mais par contre j'ai pas accès a toutes les méthodes gérée par la UIview !

Alors ma question est : comment puis-je incorporer une UIview déjà  créée pour qu'elle fonctionne ?

Réponses

  • Philippe49Philippe49 Membre
    08:02 modifié #2
    Si cela vient d'un framework, as-tu fait les importations nécessaires ?
    (voir l'onglet plug-ins dans Interface Builder)
  • yodarkyodark Membre
    08:02 modifié #3
    cela vient pas d'un framework c'est simplement 2 classes que j'ai importées.
    Logiquement ça devrait marcher?

    ce que je fais pour afficher la vue fonctiuonnelle c'est :


    c'est le fait de l'initialisation qui ne se fait pas dans le Interface builder?
  • Philippe49Philippe49 Membre
    08:02 modifié #4
    dans 1220252759:

    c'est le fait de l'initialisation qui ne se fait pas dans le Interface builder?

    Non cela ne vient pas de là .

    Bon UIWindow hérite de UIView, donc addSubview doit marcher

    Il y a un crochet de trop dans l'initialisation de mapView
    Tu as essayé avec une autre frame ?
          MapView* mapView = [[[MapView alloc] initWithFrame:  CGRectMake(10.,10. 50.,50.)] autorelease];

    Sinon vérifier si window est bien ce que tu crois qu'il est.
  • yodarkyodark Membre
    septembre 2008 modifié #5


    Ce code fonctionne  il m'affiche correctement ma carte a l'écran

    Par contre quand je veux incorporer cette vue dans interface builder ça foire... je glisse une vue sur le stage, je la change en classe mapview et ça ne fonctionne pas.
    (l'idée c'est d'incorporer la vue dans mon programme qui a déjà  plusieurs vues et un tab bar controller pour switcher de vue)
  • CéroceCéroce Membre, Modérateur
    08:02 modifié #6
    En relisant tes messages, j'ai l'impression que tu t'attends à  ce que ta MapView s'affiche dans IB. Là , tu peux toujours attendre, les Custom Views ne s'affichent jamais, mais lance ton appli, ça va marcher.
  • yodarkyodark Membre
    08:02 modifié #7
    :)
    Non je m'attendais pas a voir le résultat dans IB... Mais quand je lance j'ai toujours une page blanche... Y a t-il des exceptions ou des configurations spéciales a faire pour qu'une custom view puisse être ajoutée via interface builder ?
  • CéroceCéroce Membre, Modérateur
    08:02 modifié #8
    Non, vraiment, normalement, tu glisses un Custom View dans la fenêtre et tu changes juste sa classe dans l'onglet Identity de l'inspecteur, et ça roule !
  • laurrislaurris Membre
    08:02 modifié #9
    Et si tu nous disais où on peut trouver MapView et si le code est disponible ? On pourrait voir si c'est pas buggé. Il est possible que l'initialisation de la vue se fasse dans un handler qui n'est pas appelé quand on passe par IB.
  • yodarkyodark Membre
    08:02 modifié #10
    Et si tu nous disais où on peut trouver MapView et si le code est disponible

    Très volontiers  :P voici la source :

    http://code.google.com/p/iphone-google-maps-component/
  • laurrislaurris Membre
    septembre 2008 modifié #11
    J'ai essayé et ça marche. On peut créer MapView dans IB et l'afficher. D'ailleurs merci pour le tuyau, ça a l'air sympa et c'est exactement ce que je cherchais l'autre jour.

    ... ah oui, au fait ... que faut-il faire pour que la vue apparaisse ? réponse là :

    Doc UIView

    En réalité, le chargement des vues n'est pas tout à  fait le même dans cocoa vs cocoaTouch.
  • amnesicamnesic Membre
    08:02 modifié #12
    dans 1220270176:

    Et si tu nous disais où on peut trouver MapView et si le code est disponible

    Très volontiers  :P voici la source :

    http://code.google.com/p/iphone-google-maps-component/


    Code très intéressant en effet. Le problème c'est qu'il passe par un serveur intermédiaire : http://www.wenear.com/iphone-test? . Bref c'est pratique pour expérimentation mais le code ne passera pas dans AppStore. (pas de logo-copyright Google )

    J'aimerais bien trouvé la même chose en accord avec la politique d'utilisation de API Google, si il y en a qui connaisse des alternatives je suis preneur.
  • yodarkyodark Membre
    08:02 modifié #13
    J'ai essayé et ça marche

    Du premier coup? Ah bon je me demande comment tu as fait...

    en tout cas j'ai trouvé la réponse sur le groupe de discussion du concepteur il fallait ajouter

    - (id) initWithFrame:(CGRect)frame {
        if (! (self = [super initWithFrame:frame]))
            return nil;

            [self didMoveToSuperview];

            return self;

    }

    - (void) didMoveToSuperview {
            self.onClickHandler = nil;
        self.autoresizesSubviews = YES;
        self.multipleTouchEnabled = YES;

        mMapWebView = [[[MapWebView alloc] initWithFrame:self.bounds]
    autorelease];
        [self addSubview:mMapWebView];

        [self resetTouches];

    }


    Sinon le lien que tu m'a donné pointe sur un fichier en local  ;)

    @amnesic
    Le site utilise simplement l'API de google map comme on peut la trouver partout sur le net. Donc rien ne t'empêche de faire ta propre carte avec le copyright de google. Je sais comment il a fait pour ne pas avoir ça sur sa carte... Peut-être sa clé API est une version pro et du coup pas de logos
  • laurrislaurris Membre
    08:02 modifié #14
    J'ai corrigé le lien pour aller vers apple.com même si le lien local devrait aussi marcher puisque c'est la doc installée.
    Dans cette doc, on lit juste que les custom UIView créées dans IB n'appellent pas initWithFrame: contrairement à  NSView.
    Donc pour les initialiser, il faut utiliser initWithCoder: à  la place.

    Le truc de "didMoveToSuperview", j'imagine que c'est pour initialiser la vue quelle que soit son origine, mais je trouve ça assez tordu. Il existe des initialisateurs spécifiques pour chaque situation, autant les utiliser.
Connectez-vous ou Inscrivez-vous pour répondre.