2016-07-06 16 views
0

Ich bin neu in Objective-C. Ich habe eine Tabellenansicht mit einer Liste von URLs. Wenn der Benutzer auf eine Zelle in der Tabellenansicht klickt, werden sie zu einem zweiten Ansichtscontroller mit einer Webansicht geführt, die die Website anzeigt. Wenn ich die App starte, erscheint die Webansicht jedoch leer. Ich denke, der didSelectRowAtIndexPath ist das Problem. Wie übertrage ich die URL zum zweiten View-Controller?didSelectRowAtIndexPath übergibt die URL nicht an den nächsten View-Controller?

ListTableViewController.m

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath: (NSIndexPath *)indexPath 
{ 
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; 
    FeaturedWebViewController *vc = [[FeaturedWebViewController alloc] init]; 
    vc.url = cell.textLabel.text; 

    [self.navigationController pushViewController:vc animated:YES]; 
} 

FeaturedWebViewController.m

NSURL *URL = [NSURL URLWithString: [self.url stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceAndNewlineCharacterSet]]]; 

NSURLRequest *request = [NSURLRequest requestWithURL:URL]; 
[self.webView loadRequest:request]; 
+0

Ich würde überprüfen, dass cell.textLabel.text den richtigen Wert hat; Vielleicht sollten Sie den Code anhalten und sicherstellen, dass vc.url die Zeichenfolge enthält, die Sie erwarten. Wenn das richtig aussieht, dann ist das Problem wahrscheinlich in FeaturedWebViewController. Vielleicht schlägt die Konvertierung von String zu NSURL fehl? Nicht sicher ... bitte poste den Code, wenn du immer noch Probleme hast. –

+0

Wir müssten auch den Code des zweiten View-Controllers sehen, in dem Sie den '.url'-Wert verwenden. – Putz1103

+0

Ich würde keine Daten aus einer Zelle ziehen, sondern aus der Struktur, mit der Sie die Zelle bevölkern. –

Antwort

0

Vielleicht ist Ihr cell.textLabel.text ist gleich Null, wie WMios vor 1 Stunde gesagt.

Sie sollten lieber das ursprüngliche Datenarray, das Ihre Tabellenansicht populierte. Der Zelleninhalt wird gelöscht, wenn er bereits angezeigt wird. Sie können also den aktuell angezeigten cell.textlabel.text nicht abrufen, wenn alle Zellen bereits wiederverwendet wurden.

Also, wenn Sie Coredata oder popluated änderbaren Array (= listOfItem unten) verwenden, dann würde es so aussehen:

YourCoreDataSet *yourDataRow = [listOfItem objectAtIndex:indexPath.row]; 
FeaturedWebViewController *vc = [[FeaturedWebViewController alloc] init]; 
vc.url = yourDataRow.yourDataFieldHere; 

// Ich empfehle Ihnen mit NSLog wie folgt zu überprüfen:

NSLog(@"sending value: %@, received value: %@", yourDataRow.yourDataFieldHere, vc.url); 
0

Einige Haltepunkte sollten dieses Problem lösen, aber vorausgesetzt, dass textLabel.text den richtigen URL-Wert hat und eine gültige URL ist (enthält keine Leerzeichen), ist das Problem wahrscheinlich, dass Ihre [self.webView loadRequest: request] ausgeführt wird die Eigenschaft url auf FeaturedWebViewController.

Ohne weitere Informationen, aber es ist alles Spekulation. Verwenden Sie den Debugger, und ermitteln Sie, ob Sie in [NSURLRequest requestWithURL: URL] ein Nicht-NIL-NSURL-Objekt erstellen.

0

Schritt 1: - Schreiben Sie diesen Code in FirstVC, .m-Datei.

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ 

return mutArryAllUrl.count; 
} 
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"myCell" forIndexPath:indexPath]; 
cell.lblUrl.text = mutArryAllUrl[indexPath.row]; 
return cell; 
} 
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ 

SecondVC *aSecondVC = [self.storyboard instantiateViewControllerWithIdentifier:@"SecondVC"]; 

//Here create one NSString Property in SecondVC, name is 'strURL' for getting URL. 
SecondVC.strURL = mutArryAllUrl[indexPath.row]; 
[self.navigationController pushViewController:aSecondVC withDefinedAnimated:YES]; 
[tableView deselectRowAtIndexPath:indexPath animated:YES]; 
} 

Schritt 2: - Notieren Sie sich diesen Code in SecondVC, .h-Datei

@property (strong, nonatomic) IBOutlet NSString *strURL; 
@property (weak, nonatomic) IBOutlet UIWebView *webView; 

Schritt 3: - Geben Sie den Code in SecondVC nach unten, .m-Datei. URL in _strURL-Eigenschaft speichern und URL in Webansicht laden.

- (void)viewDidLoad { 
[super viewDidLoad]; 
NSURL *url = [NSURL URLWithString:_strURL]; 
NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url]; 
[_webView loadRequest:urlRequest]; 
}