Vous n'avez pas besoin d'utiliser un NSMutableString
pour cela.
Ajoutez une propriété url
, juste un NSString
normal, au contrôleur de deuxième vue. Avant de pousser le deuxième contrôleur d'affichage sur la pile de navigation, vous devez définir cette propriété url
sur l'URL locale que vous souhaitez charger.
Ensuite, dans la deuxième vue classe contrôleur, mettre en œuvre:
- (void)setUrl:(NSString *)newUrl {
if(url != newUrl){
[url release];
url = [newUrl retain];
// [webView load.... load the new url in the webView.
}
}
Cela peut être au-delà de vous les connaissances actuelles, il contient un code Objective-C vital, comme les propriétés, setters et gestion de la mémoire, mais juste essai et voyez ce que vous pouvez faire pour le faire fonctionner.
EDIT Vous n'avez même pas besoin de cette propriété. Il suffit d'implémenter une méthode comme loadUrl:
dans le webViewController. Ensuite, avant de pousser webViewController, appelez cette méthode avec l'URL que vous voulez charger. Ensuite, avant de pousser webViewController, appelez cette méthode avec l'URL que vous voulez charger. Évite une propriété et se débarrasse de tout le code de gestion de la mémoire supplémentaire.
if (self.myWebViewController == nil) {
//initialise
webViewController *viewWeb = [[webViewController alloc] initWithNibName:@"webViewController" bundle:[NSBundle mainBundle]];
self.myWebViewController = viewWeb;
[viewWeb release];
}
[self.myWebViewController loadUrl:@"some-local-url"];
[self.navigationController pushViewController:self.myWebViewController animated:YES];
En note, une bonne pratique consiste à mettre en majuscule chaque nom de classe.Maintenant, vous avez une classe webViewController
, mais dans Cocoa, il est courant de nommer la classe WebViewController
, alors vous pouvez avoir une variable appelée webViewController
. En outre, vous pouvez voir clairement si vous traitez avec objet (variable) ou juste une classe. J'ai donc oublié le fait que webView n'aura pas été chargé tant que votre vue ne sera pas chargée. Pour le résoudre, vous devrez réintroduire la propriété dont j'ai parlé plus tôt. Cette fois quelques ajustements sont faits. Dans votre classe webViewController, ajoutez le code suivant:
- (void)viewDidLoad {
// viewDidLoad gets automatically called once the view has loaded. Here we want to load the webView.
[self loadWebView];
}
- (void)setUrl:(NSString *)newUrl {
if(url != newUrl){
[url release];
url = [newUrl retain];
// Update the webView with the newly set URL. This will not do anything if the view hasn't been loaded, since webView will still be nil. That's why we call loadWebView again when the view gets loaded, in viewDidLoad.
[self loadWebView];
}
}
- (void)loadWebView {
// Here you'll have to load the url. You can access it using `self.url`.
//[webView load...
}
Maintenant, dans le premier contrôleur de vue, mettre à jour [self.myWebViewController loadUrl:@"some-local-url"];
à self.myWebViewController.url = @"some-local-url";
.
Merci beaucoup beaucoup. J'ai ajouté une URL de propriété NSString au deuxième contrôleur de vue et ma seule question est comment puis-je appeler cette méthode setUrl du premier contrôleur de vue? – JamesTreanor
S'il vous plaît voir mes mises à jour répondre. Je me suis débarrassé de la propriété car ce n'est pas vraiment nécessaire. – Joost
Merci beaucoup. Cela a fonctionné presque parfaitement. Le seul problème est que lorsque j'appuie sur un bouton, il me donne un uiview vide, mais si je puis appuyez sur la barre de navigation et appuyez sur un bouton, il affiche le bon fichier html. Des idées sur la raison pour laquelle cela se produit? – JamesTreanor