Cordova - UIColor et NSURL

juillet 2014 modifié dans API UIKit #1

Bonjour, bonjour,


 


 


Actuellement sur un projet avec Cordova, j'aurais deux questions. Déjà , sur cette méthode :



- (void)webViewDidFinishLoad:(UIWebView*)theWebView
{
// Black base color for background matches the native apps
theWebView.backgroundColor = [UIColor grayColor];

return [super webViewDidFinishLoad:theWebView];
}

Ceci fonctionne comme attendu mais si je fais ça :



- (void)webViewDidFinishLoad:(UIWebView*)theWebView
{
// Black base color for background matches the native apps
UIColor *myColor = [[UIColor alloc] initWithRed:180 green:180 blue:180 alpha:1];
theWebView.backgroundColor = myColor;

return [super webViewDidFinishLoad:theWebView];
}

Le background reste désespérément blanc, quelques soient les valeurs indiqués. En fait c'est noir ou blanc.


 


 


Ma deuxième question concerne ce code :



NSURL *rootURL;
rootURL = [[NSBundle mainBundle] URLForResource:@www/htmlInfos withExtension:@html];

[self.webView loadRequest:[NSURLRequest requestWithURL:htmlLegal]];

Qui génère ces deux erreurs :


 



 


2014-07-29 10:43:09.560 app[1112:60b] Resetting plugins due to page load.


2014-07-29 10:43:09.717 app[1112:60b] Finished load of: http://app.beebox/



 


Je ne suis pas sûr que le URLForResource soit correcte.


 


Merci pour votre aide.


Réponses

  • Les constante passer dans les couleurs doivent avoir des valeur  entre 0 et 1 non? du coup je penses que par défaut si c'est supérieur à  1 il prend 1


    Donc un : 



    UIColor *myColor = [[UIColor alloc] initWithRed:180./255. green:180./255. blue:180./255. alpha:1];

    Devrait marcher non?


  • NasatyaNasatya Membre
    juillet 2014 modifié #3

    J'avais pas vu la deuxième je penses que ton path est mauvais effectivement.


    Essais un truc dans ce genre pour voir



    NSString* resourcePath = [[NSBundle mainBundle] resourcePath];
    NSString* htmlPath = [NSString stringWithFormat:@%@%@", resourcePath, @/www/htmlInfos.html];

    Pour ça je te garantie rien mais sans voir la structure du projet c'est pas forcement simple.


     


    Sinon tu reprends ton code sans le "www/" ça peut marcher suivant comment tu as importé ton fichier html.


  • samirsamir Membre
    juillet 2014 modifié #4

    @ObjectiveSwift :


     


    Comme c'est deux sujets différents le mieux c'est de lancer deus discussions au lieux d'une.


    Formattage du code avec les bonnes balises pour la lisibilité du code.


     


    et Bienvenu !  :)


  • juillet 2014 modifié #5

    Merci Nasatya, ok pour UIColor, j'ai complètement oublié que la valeur max était 1 :)


     


    Samir, modifications apportés mais ça n'a pas fonctionné du premier coup.


     


    Alors concernant mes pages HTML ça ne fonctionne toujours pas mais je n'ai plus de message d'erreur. J'ai du récupérer à  nouveau mon projet et repartir à  zéro donc difficile de savoir pourquoi je n'est plus ces messages.


     


    Par contre a la racine de mon projet j'ai un dossier www et mes fichiers HTML sont à  l'intérieur. Bon je vais regarder un peu plus en profondeur la doc de Cordova.


     


    Merci pour vos réponses.




  • Alors concernant mes pages HTML ça ne fonctionne toujours pas.




     


    Essaie avec :



    - (void)loadHTMLString:(NSString *)string baseURL:(NSURL *)baseURL

    En passant la bonne valeur à  baseURL.



  • En passant la bonne valeur à  baseURL.




     


    Alors justement, ça marche comment baseURL ? Parce que d'après mes premiers essais, rien... J'ai regardé la doc mais je ne vois pas trop quoi mettre. Dans un exemple que j'ai téléchargé (sur le site Apple), j'ai ceci :



    [self.webView loadHTMLString:[NSString stringWithFormat:anchorInstallTemplate, failingURL, installURL] baseURL:[NSURL fileURLWithPath:anchorInstallPath]];
  • juillet 2014 modifié #8

    Je viens de faire un nouvel essai sur un projet tout neuf et avec mon fichier HTML a la racine de ce projet. J'ai donc ce code :



    UIWebView *myWebView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, frame.size.width, frame.size.height)];
    [myWebView setUserInteractionEnabled:YES];
    [myWebView setDelegate:self];
    [myWebView setScalesPageToFit:YES];
    [self addSubview:myWebView];

    NSString* resourcePath = [[NSBundle mainBundle] resourcePath];
    NSString* htmlPath = [NSString stringWithFormat:@%@%@", resourcePath, @/infos.html];

    NSLog(@%@", htmlPath);

    NSURLRequest *myURL = [NSURLRequest requestWithURL:[NSURL URLWithString:@infos.html]];

    [myWebView loadRequest:myURL];


    J'ai essayé avec et sans le slash. Le htmlPath ne fonctionne pas non plus.


     


    Merci pour vos retours.


  • NasatyaNasatya Membre
    juillet 2014 modifié #9

    En même temps dans ton code tu t'en sers pas ;)



    [NSURL fileURLWithPath:htmlPath] //?

    Après je sais pas si le NSURLRequest est capable de prendre des urls locale.


     


    edit : Après test ça fonctionne j'ai crée un POC vite fait un fichier data.html avec un <h1>hello world</h1>


     


    Je l'affiche avec ce code là  sans souci.



    NSString* resourcePath = [[NSBundle mainBundle] resourcePath];
    NSString* htmlPath = [NSString stringWithFormat:@%@/data.html", resourcePath];
    NSURLRequest *myURL = [NSURLRequest requestWithURL:[NSURL fileURLWithPath:htmlPath]];
    [self.webView loadRequest:myURL];

    Ma WebView est géré par mon Storyboard mais ça ne change rien du tout à  l'exemple normalement.


  • haha, merci Nasatya. Oui un URLRequest peut renvoyer l'URL :



    NSLog(@%@", myURL.URL);

    ici :


     



     


     


    NSURLRequest objects represent a URL load request in a manner independent of protocol and URL scheme.

     


     


    Bon, une dernière question par apport à  la UIWebView. Est-il possible, avant de télécharger un fichier de savoir si elle est capable de l'ouvrir ? Il y a bien un dataDetectorTypes mais il ne réponds pas au besoin, ou alors j'ai rien compris.


  • A défaut, est-il possible de savoir si le système est capable d'ouvrir tel ou tel fichier ? Via des app tiers...


  • samirsamir Membre
    juillet 2014 modifié #12

    Hello,


     


    La webView ne peut pas détecter si elle peut ouvrir tel ou tel document, mais tu as une liste de documents que tu peux ouvrir dans une webView, donc c'est à  toi de tester si le document que tu veux ouvrir est dans cette liste avant de demander à  la webView de l'ouvrir.


     


    La webView va notifier son delegate si le chargement d'un document n'a pas abouti. ( pas de connexion internet pour un document distant,....).



    - (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error

    https://developer.apple.com/library/ios/documentation/uikit/reference/UIWebViewDelegate_Protocol/Reference/Reference.html#//apple_ref/occ/intfm/UIWebViewDelegate/webView:didFailLoadWithError:


     


     


    Voici la liste des documents que une webView peut ouvrir : 


     


    https://developer.apple.com/library/ios/qa/qa1630/_index.html


  • Super, merci Samir.


     


    Une dernière question avant de clore le sujet. Je fais appel à  UIDocumentInteractionController pour partager des documents avec d'autres Applications installés sur le système. Est-il possible de le "customiser" et/ou de sélectionner les options que l'on veut ou pas ?


     


    J'ai vu les propriétés UTI et annotation mais annotation me renvois systématiquement null. UTI me renvois public.png par exemple.


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