2012-03-28 3 views
0

Je sais que c'est un problème si simple, mais j'ai eu du mal avec ça et ça ne marchera pas. J'essaye d'obtenir un UITableView pour ouvrir une URL quand une rangée spécifique est choisie. En utilisant NSLog, je peux voir que la variable urlSelected est correctement définie et transmise au UrlViewController correctement, mais elle n'affiche tout simplement pas le webview. Il affiche uniquement un menu de navigation avec un écran noir. Si j'ajoute une relation push entre les deux contrôleurs de vue, le ViewController se charge correctement mais il a du mal à transmettre la variable urlSelected à UrlViewController. Quelle est la bonne façon de passer cette variable, ou ai-je besoin d'établir une relation différente entre les deux ViewControllers? Voici ce que j'ai actuellement:UIWebView pas de chargement

RootViewController.m:

#import "RootViewController.h" 
    #import "UrlViewController.h" 
    .......... 
    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath   *)indexPath 
    { 

     UrlViewController *webController = [[UrlViewController alloc] init]; 


     if(indexPath.row == 0){ 
      webController.urlAddress = @"http://www.yahoo.com"; 
      NSLog(@"urlAddress being passed is:%@", webController.urlAddress); 
      [self.navigationController pushViewController:webController animated:YES]; 

     }else if(indexPath.row == 1){ 
      webController.urlAddress = @"http://www.google.com"; 
      NSLog(@"urlAddress being passed is:%@", webController.urlAddress); 
      [self.navigationController pushViewController:webController animated:YES]; 


     }else{ 
      webController.urlAddress = @"http://www.abc.com"; 
      NSLog(@"urlAddress being passed is:%@", webController.urlAddress); 
      [self.navigationController pushViewController:webController animated:YES]; 

     }  

    } 

UrlViewController.h:

 @interface UrlViewController : UIViewController{ 
      NSString *urlAddress; 
     } 
     @property (strong) IBOutlet UIWebView *webView; 
     @property (nonatomic, retain) NSString *urlAddress; 

UrlViewController.m:

 @implementation UrlViewController 
     @synthesize webView; 
     @synthesize urlAddress; 
     ........... 
    - (void)viewWillAppear:(BOOL)animated { 
     NSURL *url = [NSURL URLWithString:urlAddress]; 
     NSURLRequest *requestObj = [NSURLRequest requestWithURL:url]; 
     [self.webView loadRequest:requestObj]; 
     NSLog(@"The value being receieved is:%@", urlAddress); 
    } 

    - (void)viewDidLoad 
    { 
     [super viewDidLoad]; 
     // Do any additional setup after loading the view. 
    } 

Je reçois la sortie suivante de les NSLogs:

2012-03-28 09:53:30.266 BeloitTurner[4278:f803] urlAddress being passed is:http://www.yahoo.com 
    2012-03-28 09:53:30.269 BeloitTurner[4278:f803] The value being receieved is:http://www.yahoo.com 

Toute aide est très appréciée.

+0

J'ai répondu à cette question [ici] (http://stackoverflow.com/questions/8791517/pass-a-uiwebview-request-using-prepareforsegue/13723765#13723765)! C'est calme la même question. – Ashoor

Répondre

0

Il semble que vous utilisiez un storyboard contenant les vues de RootViewController et d'UrlViewController. Si tel est le cas, vous devez instancier votre UrlViewController en utilisant le story-board:

UrlViewController* webController = [self.storyboard instantiateViewControllerWithIdentifier:@"UrlViewController"]; 

Utilisez ce lieu de la façon dont vous alloc init Le webController dans votre tableView: didSelectRowAtIndexPath: méthode. En outre, dans le storyboard contenant les vues de ces deux contrôleurs de vue, définissez le champ Identificateur sous la section Contrôleur de vue de l'inspecteur d'attributs dans Interface Builder pour qu'il devienne la chaîne UrlViewController. La raison pour cela est que le fichier décrivant la vue pour UrlViewController se trouve dans le storyboard. Allouer UrlViewController signifie qu'il ne trouvera pas sa vue associée et affichera simplement un écran noir.

Vous pouvez également le faire avec la relation Push. Au lieu de la méthode tableView: didSelectRowAtIndexPath:, vous devez simplement configurer la relation Push (un segment) de la cellule dans le contrôle RootViewController vers UrlViewController. Dans votre fichier RootViewController.m, ajoutez la méthode suivante:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([segue.identifier isEqualToString:@"PassUrlToUrlViewControllerSegue"]) { 
     segue.destinationViewController.urlAddress = @"http://www.yahoo.com"; 
    } 
} 

Cela vous besoin pour définir l'identificateur pour la Segue Push pour travailler. Sélectionnez la flèche représentant la séquence Push dans le storyboard et définissez son identifiant sur la chaîne PassUrlToUrlViewControllerSegue.

Vous pouvez rendre ceci dynamique en utilisant le paramètre expéditeur qui vous est donné dans prepareForSegue: expéditeur: pour identifier quelle cellule a été sélectionnée et donc quelle URL passer.

+0

Cela a fait l'affaire et était exactement ce que je cherchais. Merci beaucoup pour votre aide. – SchoolTechie

Questions connexes