didSelectRowAtIndexPath没有将url传递给下一个视图控制器?

时间:2016-07-06 20:14:55

标签: ios objective-c didselectrowatindexpath

我是Objective-C的新手。我有一个表格视图,其中包含网址列表。当用户单击表视图中的单元格时,它们被引导到第二个视图控制器,其中Web视图显示该网站。但是,当我运行应用程序时,Web视图显示为空白。我认为didSelectRowAtIndexPath是问题所在。那么如何将url传递给第二个视图控制器呢?

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];

3 个答案:

答案 0 :(得分:0)

也许你的cell.textLabel.text是零,就像一小时前WMios所说的那样。

您应该更好地获取弹出tableview的原始数据数组。单元格内容在已经显示时刷新。因此,当所有单元格都已被重用时,您无法获得当前显示的cell.textlabel.text;

所以,如果你使用coredata或popluated mutable array(=下面的listOfItem),那就是这样的:

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

//我建议你像这样检查NSLog:

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

答案 1 :(得分:0)

一些断点应该可以解决这个问题,但假设textLabel.text具有正确的url值并且它是一个有效的url(不包含空格),则问题很可能是你的[self.webView loadRequest:request]正在运行在FeaturedWebViewController上设置url属性之前。

尽管有所有猜测,但没有更多信息。如果您在[NSURLRequest requestWithURL:URL]中创建非零NSURL对象,请使用调试器并确定。

答案 2 :(得分:0)

第1步: - 在FirstVC,.m文件中记下此代码。

-(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];
}

第2步: - 在SecondVC,.h文件中记下此代码

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

第3步: - 在SecondVC,.m文件中记下此代码。 URL存储在_strURL属性中,并在Web视图中加载URL。

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