如何在webview iOS中打开表格单元格中的URL

时间:2015-03-11 22:11:03

标签: ios uitableview url webview cells

我刚刚想出了如何在两个表视图中打开选项卡式导航控制器。我希望能够点击其中一个表格单元格(页面上的6个),并为此打开webview中的URL。

这是我的代码:

 #import "FlashTopicsEViewController.h"
#import "ADVTheme.h"

@implementation FlashTopicsEViewController
@synthesize webView;

NSArray *flashtopicsEth;
NSArray *urlLinks;

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

self.view.backgroundColor = [ADVTheme viewBackgroundColor];
self.view.tintColor = [UIColor whiteColor];

flashtopicsEth = [NSArray arrayWithObjects:@"Topic1",@"Topic2", nil];
urlLinks = [[NSArray alloc] initwithObjects:@"http://url1.com", @"http://url2.com",nil];
 webView.delegate = self;

NSURL *URL = [NSURL URLWithString: urlLinks[indexPath.row]];
NSURLRequest *requestObj = [NSURLRequest requestWithURL:URL];
[webView loadRequest:requestObj];
}

这是下面的代码:

 - (UITableViewCell *)tableView:(UITableView *)tableView 
cellForRowAtIndexPath:(NSIndexPath *)indexPath

{
static NSString *simpleTableIdentifier = @"FlashTopicECell";

UITableViewCell *cell = [tableView    
dequeueReusableCellWithIdentifier:simpleTableIdentifier];

if (cell == nil) {
    cell = [[UITableViewCell alloc] 
initWithStyle:UITableViewCellStyleDefault 
   reuseIdentifier:simpleTableIdentifier];
}
UIImage *image1 = [UIImage imageNamed:@"flashImage.png"];
cell.imageView.image = image1;

cell.textLabel.text = [flashtopicsEth objectAtIndex:indexPath.row];
return cell;
}

这就是我的.h文件中的内容

#import <UIKit/UIKit.h>

@interface FlashTopicsEViewController : UIViewController 

@property NSArray *urlLinks;
@property NSArray *flashtopicsEth;


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

@end

1 个答案:

答案 0 :(得分:0)

@matt是对的,这很难做到lol :)但无论如何,你需要做的是使用一个名为“didSelectRowAtIndexPath”的UITableView的委托方法。这将检测何时敲击一个单元格:

你的问题非常基础而且不详细,所以为了这个基本答案的目的,我将在头文件中声明一个UIWebView,然后使用它。您需要将它添加到ViewController并将其链接起来。我也不知道你是如何存储你的URL的,我猜你使用的是数组?为了这个答案的目的,我也会。

IBOutlet UIWebView *websiteView;
NSArray *urlLinks;

现在开始实现代码:

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

     // Get the cell number that was tapped and then
     // use that to access your array of URLs. 
     // Then pass that URL to a UIWebView.
     NSURL *URL = [NSURL URLWithString:urlLinks[indexPath.row]];
     NSURLRequest *requestObj = [NSURLRequest requestWithURL:URL];
     [websiteView loadRequest:requestObj];
}

同样在viewDidLoad中,像这样设置webview委托:

websiteView.delegate = self;

更新 - 回答您的意见

好的,在我的回答中,我假设您使用数组作为URL列表。但也有其他方法。如果您不想使用数组,则不必使用数组。

关于如何填充数组?那取决于很多事情:

1)您是否从服务器下载了URL列表?

2)您是否在代码中设置了网址列表?

如果您正在执行选项1,那么您可能正在解析类似于从服务器下载的JSON文件。在这种情况下,您可能希望使用以下内容:

urlLinks = [[feed objectForKey:@"items"] valueForKey:@"url"];

上面的代码会将所有url链接放入您的数组中。 (这只是一个非常小的片段 - 而不是整个代码 - 只是为了给你一个想法)。

如果你选择选项2,那么你已经知道了URL列表,并且想要在你的应用中定义它们,那么就这样做:

NSArray *urlLinks = [[NSArray alloc] initwithObjects:@"http://url1.com", @"http://url2.com", ...etc.... , nil];

然后要访问URL,你需要基本上从正确的数组对象中获取字符串,然后将其转换为NSURL,然后将其传递给您的webview,如下所示:

 NSURL *URL = [NSURL URLWithString:urlLinks[indexPath.row]];
 NSURLRequest *requestObj = [NSURLRequest requestWithURL:URL];
 [websiteView loadRequest:requestObj];

最后,您展示UIWebView的方式取决于您。如果你不想要它,它不必在一个单独的ViewController中。随你(由你决定。但如果你这样做,那么是的,接下来就是在屏幕上显示下一个视图控制器。请记住,如果您希望该视图控制器中的UIWebView显示您的网站,则必须将URL传递给它。

更新2 - 回答您的问题/代码

好的,你的代码有些问题:

  • 摆脱数组声明中的“etc ....”位置。大声笑我只是添加了它,以帮助您了解如何填充数组。所以它应该是:

    flashtopicsEth = [NSArray arrayWithObjects:@"Topic1",@"Topic2", nil];
    
  • 您刚刚在实现(.m)文件中随机插入了数组代码....这不是您放置的位置。您可以将其插入到viewDidLoad等方法或您自己创建的其他方法中。您不能随意在任何地方添加它。因此,为了简单起见,我们首先在viewDidLoad中分配数组,如下所示:

    -(void)viewDidLoad {
    
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    
    
    flashtopicsEth = [NSArray arrayWithObjects:@"Topic1", @"Topic2", nil];
    urlLinks = [[NSArray alloc] initwithObjects:@"http://url1.com",@"http://url2.com", nil];
    
    webView.delegate = self;
    
    NSURL *URL = [NSURL URLWithString: urlLinks[indexPath.row]];
    NSURLRequest *requestObj = [NSURLRequest requestWithURL:URL];
    [webView loadRequest:requestObj];
    

    }

  • 在头文件中声明您的NSArray,并在实现(.m)文件中分配它们。不要在viewDidLoad中声明它们,因为它们将是viewDidLoad的本地,并且除非将数组传递给它们,否则其他UITableView方法将无法访问它们。为了保持简单(因为您是初学者),只需在标题(.h)文件中声明它们:

#import <UIKit/UIKit.h>

   @interface FlashTopicsEViewController : UIViewController {

    NSArray *flashtopicsEth;
    NSArray *urlLinks;
}


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

@end