如何从 webview iOS 中的表格单元格打开 url

Posted

技术标签:

【中文标题】如何从 webview iOS 中的表格单元格打开 url【英文标题】:How to open url from table cells in webview iOS 【发布时间】:2015-03-11 22:11:02 【问题描述】:

我刚刚弄清楚如何在两个表格视图中打开一个选项卡式导航控制器。我希望能够单击一个表格单元格(一页上 6 个),并为此在 web 视图中打开 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;

@结束

【问题讨论】:

我是一个完整的新手,基本上需要一个教程来学习 - 在 appcoda 上的下一个控制器上有链接表格和详细信息的教程,但我找不到任何关于如何排列 url 的内容 【参考方案1】:

@matt 是对的,这很简单,哈哈 :) 但是无论如何,你需要做的是利用 UITableView 的一种名为“didSelectRowAtIndexPath”的委托方法。这将检测何时点击单元格:

您的问题非常基本且不详细,因此出于此基本答案的目的,我将在头文件中声明一个 UIWebView 然后使用它。您需要将其添加到您的 ViewController 并将其链接起来。我也不知道你是如何存储你的网址的,我想你正在使用一个数组?好吧,就这个答案而言,我也会。

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;

更新 - 回复您的 cmets

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

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

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

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

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

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

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

如果您使用选项 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&lt;UIKit/UIKit.h&gt;

   @interface FlashTopicsEViewController : UIViewController 

    NSArray *flashtopicsEth;
    NSArray *urlLinks;



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

@end

【讨论】:

@weat010 好的,我更新了我的答案,希望能帮助回答您的 cmets。 @weat010 好的,我已更新我的答案以匹配您的 cmets/问题。希望他们有所帮助。

以上是关于如何从 webview iOS 中的表格单元格打开 url的主要内容,如果未能解决你的问题,请参考以下文章

如何在编辑表格视图单元格中的文本字段时重新加载所有表格视图单元格 - iOS Swift

iOS:如何在代码中的表格单元格中为文本字段添加约束

IOS 7中的表格视图单元格扩展

iOS - 如何修复表格视图单元格中的此动画向左然后再次返回

如何在iOS,Objective C的tableview中的每个部分中仅实现单个单元格选择

如何使用自定义按钮重新排序表格视图单元格,但不使用 ios 中的移动编辑图标