2009-08-30 8 views
0

Je suis un débutant au développement de l'iPhone et j'ai une question, qui peut finir par aider à comprendre ce concept en général.UIViewControllers et UIWebView

Fondamentalement, j'ai UIViewController qui charge une vue avec un tas de choses. Maintenant, je veux quand un utilisateur clique sur un bouton, pour charger une vue différente, qui se trouve être un webView. Maintenant, je veux que le weview charge une url différente selon le bouton pressé dans la vue d'origine.

Comment puis-je faire cela? En gros, dans ma tête, je pensais que je pouvais charger et échanger les vues lorsque le bouton est pressé, comme ceci:

Dans

- (void)tableView:(UITableView *)tableView 
didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 

    NSString *selectedLink = [valuesForSection objectAtIndex:row]; 

    NSString *urlAddress = @"http://www.google.com"; 

    //Create a URL object. 
    NSURL *url = [NSURL URLWithString:urlAddress]; 

    //URL Requst Object 
    NSURLRequest *requestObj = [NSURLRequest requestWithURL:url]; 

    //Load the request in the UIWebView. 
    [webView loadRequest:requestObj]; 

    [self.view removeFromSuperview]; 
    [self.view insertSubview:webView atIndex:0]; 
}

Est-ce la bonne façon de le faire? Ou comment je vais faire ça?

Répondre

1

Ce serait la façon dont je m'y prendrais, oui. Créez un seul UIWebView et, selon la cellule sélectionnée, chargez un NSURLRequest dans la vue en utilisant loadRequest:. Il a l'avantage de ne pas vous obliger à créer des vues Web distinctes pour chaque cellule et d'être asynchrone. Toutefois, je ne supprimerais pas nécessairement self.view de sa vue d'ensemble à chaque fois qu'une cellule clique; j'ouvrirais plutôt un contrôleur de vue modale (presentModalViewController:animated:) avec la vue Web comme vue, ou je pousserais un nouveau contrôleur sur une pile de contrôleur de navigation (pushViewController:animated:). C'est une transition plus douce et sera mieux à l'utilisateur.

Modifier (en réponse au commentaire): Oui, il est préférable d'avoir un autre contrôleur que d'échanger des vues. En faisant removeFromSuperview et addSubview:, les deux vues restent dans le même contrôleur, ce qui rendra votre code plus difficile à gérer (un contrôleur traitera deux vues) et aura une expérience utilisateur pire (il n'y a pas de transition, comme c'est le cas avec une poussée de contrôleur de navigation).

Pour faire la poussée correctement, vous devez:

  • Construire un contrôleur de navigation pour votre contrôleur de vue existant
  • Lorsque vous avez besoin, créer une nouvelle instance de UIViewController avec son point de vue réglé sur la UIWebView vous créez et chargez votre HTML
  • Appuyez sur le nouveau contrôleur de vue sur la pile du contrôleur de navigation de votre contrôleur ancienne vue en appelant:
[self.navigationController pushViewController:newViewController animated:YES];
+0

Pourriez-vous me dire comment implémenter pushviewcontroller? Mais après avoir dit que vous dites qu'il serait préférable d'avoir un autre contrôleur plutôt que juste une vue à l'intérieur? – Doz