当用户单击不同的单元格时,如何在一个 ViewController 下显示多个 webview/URL

Posted

技术标签:

【中文标题】当用户单击不同的单元格时,如何在一个 ViewController 下显示多个 webview/URL【英文标题】:how to show multiple webviews/URL's under one UiViewController when the user clicks different cells 【发布时间】:2016-07-13 22:23:05 【问题描述】:

我有一个应用程序,它在一个 UICollectionView 中有 12 个单元格。我希望当用户单击每个单元格时,它应该在一个 WebView 中打开相应的网站,就像第一个应该打开 facebook 另一个应该打开 twitter 等。

UICollectionView 中创建单元格的代码如下,我需要知道如何创建一个可能是 url 的数组并将其传递给所有单元格以显示网站。

func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int 
    return self.category.count


func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell 

    let cell = collectionview.dequeueReusableCellWithReuseIdentifier("cell", forIndexPath: indexPath) as! CollectionViewCell1

    cell.imageopenview.image = self.imagearray[indexPath.row]

    cell.titlelabel .text = self.category[indexPath.row]


    return cell

【问题讨论】:

【参考方案1】:

您需要保留一组网址,类似于您拥有imagearraycategoryarray 的方式。我怀疑,您将在创建类别和图像的同一位置创建这些 URL。

我还建议您遵循 Swift camelCase 变量命名约定(例如,“imageArray”和“categoryArray”)。

由于集合视图中的每个单元格都是具有图像、类别标题和 URL 的不同单元,因此存储单个结构数组而不是三个单独的数组也是有意义的。

struct SocialMediaSite 
  var image: UIImage
  var title: String
  var URL: NSURL

如果你这样做,那么在你的视图控制器中你可以只保留一个数组:data: [SocialMediaSite]。确保在设置图像和类别数组的相同位置使用适当的数据设置此数组。在这里,您还需要为您希望每个单元格对应的网站设置 URL。您使用 NSURL(string: "http://www.somesite.com") 创建一个 NSURL 并将其存储在 URL 变量中。

使用单个数据数组,您的函数(也遵循 Swift 命名约定)将如下所示:

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell 
    let cell = collectionview.dequeueReusableCellWithReuseIdentifier("cell", forIndexPath: indexPath) as! CollectionViewCell1

    cell.imageOpenView.image = data[indexPath.row].image
    cell.titleLabel .text = data[indexPath.row].title

    return cell

这将在 UICollectionView 中显示您当前拥有的单元格。现在,要在点击单元格时在 UIWebView 中加载对网站的请求,您必须实现另一个 UICollectionViewDelegate 方法:func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath)。每当用户点击单元格时都会调用它。

在这个函数中,你可以做如下的事情:

func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) 
    let selectedCellData = data[indexPath.row]

    let url = selectedCellData.URL // This is the website you want to go to for the cell you just tapped
    webView.loadRequest(NSURLRequest(URL: url)) // Tell the webView to load this URL

    ...

如果您想在网页加载时执行任何操作,或者在加载该 URL 的网页时出错,您可能还需要考虑让您的视图控制器成为 UIWebView 的代理。

【讨论】:

非常感谢您。我会继续尝试并更新我的帖子。我是初学者,请原谅我的错误。谢谢帮助

以上是关于当用户单击不同的单元格时,如何在一个 ViewController 下显示多个 webview/URL的主要内容,如果未能解决你的问题,请参考以下文章

单击collectionView单元格时如何打开不同的视图控制器

在单击表格单元格时推送新视图,这怎么可能? [关闭]

单击 Tableview 单元格时使用哪种方法更新 Rest Api 数据

当必须使用同一列中的不同值填充单元格时,如何填写该列中的空白单元格?

单击由笔尖制成的自定义表格单元格中的更改图像

在我的视图集合中,我添加了一个搜索栏,它过滤了单元格,但是当我单击单元格时,它自己的路径没有改变