Swift - 如何在 UITableViewCell 中使用 CollectionViewCell 打开另一个视图控制器

2023-12-11

我对 iOS/Swift 非常陌生,而且我正在进行一个小项目。在这个项目中,我在 ViewController 中有一个 UITableView。我在 UITableViewCell 旁边有另一个文件自定义 CollectionViewCell。 我希望当用户单击 CollectionView 中的单元格时,它将打开另一个 ViewController 并从该 CollectionViewCell 获取数据。 这是我的 uitableview swift 文件:

class IndexRow: UITableViewCell, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout {
var names:[String] = ["Movie 1","Movie 2","Movie 3","Movie 4","Movie 5","Movie 6"]
@IBOutlet weak var collectionView: UICollectionView!
override func awakeFromNib() {
    super.awakeFromNib()
    collectionView.registerClass(indexOneMovie.self, forCellWithReuseIdentifier: "onemovie")
    let nib = UINib(nibName: "indexOneMovie",bundle: nil)
    collectionView.registerNib(nib, forCellWithReuseIdentifier: "onemovie")
    self.collectionView.backgroundColor = UIColor.clearColor()
    self.collectionView.delegate = self
    self.collectionView.dataSource = self
    print("Hello")
}
func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    return names.count
}

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
    let cell = self.collectionView.dequeueReusableCellWithReuseIdentifier("onemovie", forIndexPath: indexPath) as! indexOneMovie
    cell.poster.image = UIImage(named: "poster.jpg")
    cell.name.text = names[indexPath.row]
    return cell
}

func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {
    print(indexPath.item)
}

func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {
    let itemsPerRow:CGFloat = 2
    let hardCodedPadding:CGFloat = 0
    let itemWidth = (collectionView.bounds.width / itemsPerRow) - hardCodedPadding
    let itemHeight = collectionView.bounds.height - (hardCodedPadding)
    return CGSize(width: itemWidth, height: itemHeight)
}

我怎样才能做到呢?


好的,我最近在我的应用程序中实现了相同的功能,这些是我最初提到的链接 -

https://ashfurrow.com/blog/putting-a-uicollectionview-in-a-uitableviewcell-in-swift/

http://www.thorntech.com/2015/08/want-your-swift-app-to-scroll-in-two-directions-like-netflix-heres-how/

您正在使 uicollectionview 委托确认 uitableview 单元格,因此您无法呈现或推送到其他视图控制器。

这是我的代码希望它能帮助你

homeController.swift 包含 uitableview

    extension HomeController : UITableViewDelegate {

        func tableView(tableView: UITableView,willDisplayCell cell: UITableViewCell,forRowAtIndexPath indexPath: NSIndexPath) {

          guard let tableViewCell = cell as? TableViewCell else { return }
            //here setting the uitableview cell contains collectionview delgate conform to viewcontroller
          tableViewCell.setCollectionViewDataSourceDelegate(self, forRow: indexPath.row, andForSection: indexPath.section)
          tableViewCell.collectionViewOffset = storedOffsets[indexPath.row] ?? 0
        }

        func tableView(tableView: UITableView,didEndDisplayingCell cell: UITableViewCell,forRowAtIndexPath indexPath: NSIndexPath) {

            guard let tableViewCell = cell as? TableViewCell else { return }
            storedOffsets[indexPath.row] = tableViewCell.collectionViewOffset
        }

    }



    extension HomeController: UICollectionViewDelegate, UICollectionViewDataSource {
        func collectionView(collectionView: UICollectionView,numberOfItemsInSection section: Int) -> Int {
          let element : [CollectionViewElement] =  self.returnCollectionViewElementAccordingToIndex(collectionView.tag)
            return element.count
        }

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

          let cell = collectionView.dequeueReusableCellWithReuseIdentifier("Cell",forIndexPath: indexPath) as! horizontalCollectionViewCell

          let element : [CollectionViewElement] =  self.returnCollectionViewElementAccordingToIndex(collectionView.tag)

          cell.cellTitleLabel.text = element[indexPath.row].videos.title
          cell.cellGenerLabel.text = element[indexPath.row].videos.gener

          return cell
      }

      func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath){


        print("collectionviewtag:\(collectionView.tag) +  indexpathrow:\(indexPath.row)")
        //from here you can do push or present to anyview controller
        // collectionviewtag is tableView cell row value and indexpathrow return collectionView cell row value.



      }


    }

TableViewCell.swift :自定义 UITableViewCell 包含 collectionView

    class TableViewCell: UITableViewCell {


        @IBOutlet  private weak  var collectionView: UICollectionView!

        @IBOutlet weak var cellLabel: UILabel!

        @IBOutlet weak var cellButton: UIButton!

        @IBAction func CellButtonActionTry(sender: UIButton) {

          print("Dude  \(cellButton.tag)")

        }




        var collectionViewOffset: CGFloat {
          get {
            return collectionView.contentOffset.x
          }

          set {
            collectionView.contentOffset.x = newValue
          }
        }

        func setCollectionViewDataSourceDelegate<D: protocol<UICollectionViewDataSource, UICollectionViewDelegate>>
          (dataSourceDelegate: D, forRow row: Int , andForSection section : Int) {

            collectionView.delegate = dataSourceDelegate
            collectionView.dataSource = dataSourceDelegate
            collectionView.tag = row // tableView indexpathrow equals cell tag
            collectionView.reloadData()
        }




        override func awakeFromNib() {
              super.awakeFromNib()
              // Initialization code
          }

          override func setSelected(selected: Bool, animated: Bool) {
              super.setSelected(selected, animated: animated)

          }

    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Swift - 如何在 UITableViewCell 中使用 CollectionViewCell 打开另一个视图控制器 的相关文章

  • 从呈现的视图控制器访问呈现的视图控制器?

    我有一个视图控制器 包含我的菜单 显示在另一个视图控制器 我的应用程序 之上 我需要从呈现的视图控制器 我的菜单 访问呈现的视图控制器 在我的菜单下方 例如访问某些变量或使呈现的视图控制器执行其segues之一 但是 我就是不知道该怎么做
  • 如何在原生 Swift 中实现以前称为 NSMutableOrderedSet 的可变有序集泛型类型?

    我正在尝试实现一个通用的可变有序集类型 它需要符合许多协议才能以与 Swift 中的数组和集合相同的方式运行 首先要实现泛型类型元素需要符合Hashable https developer apple com documentation s
  • 使用 Swift 更改整个应用程序中的 UILabel 文本颜色

    在 Swift 中有什么方法可以在整个应用程序中立即更改 UILabel 的文本颜色属性吗 我尝试过使用外观属性 但这不适用于 UILabel textColor 任何方式或任何同样工作的库 一种方法是使用颜色设置 首先在您的 xcasse
  • 为什么快速枚举中的可选项会导致无限循环?

    评估以下代码 我希望打印一次Hello World 相反 它会导致无限循环 有人可以解释为什么吗 let array what for text String in array print Hello World 删除可选的 显然让它只打印
  • iOS 新手。预期的表达错误?

    这看起来很不寻常 因为该方法与我的 showAnswer 方法完全相同 所以我想我应该在这里问 import QuizViewController h interface QuizViewController end implementat
  • just_audio 无法在 ios flutter 上工作未处理的异常:(-11800)操作无法完成

    我正在尝试从它自己的存储库运行 just audio 示例项目https github com ryanheise just audio tree master just audio example https github com rya
  • XC测试元组

    我正在尝试构建一个单元测试 如下所示 region is a Double Double tuple XCTAssertEqual region 0 0 200 0 但 Xcode 给我一个错误 Cannot invoke XCTAsser
  • 将 HTML 字符串加载到 UIWebView 中的延迟

    我在导航控制器中有两个视图控制器 第一个视图控制器有一个带有按钮的菜单 按下此按钮将移动到第二个视图控制器并将 html 字符串加载到 UIWebView 中 没有其他东西被加载到 webview 中 只是一个简单的 NSString 其中
  • 未安装的应用程序的URL方案

    简单的问题 我正在开发一个将注册自己的 URL 方案的应用程序 我计划通过人们最喜欢的 QRCode 阅读器使用 QRCode 启动该应用程序 我的问题 如果我的应用程序尚未安装在他们的 iPhone iPad 上 会发生什么 他们会被引导
  • 在 iPhone 和 Cocos2d 中从类类型(+)方法访问对象?

    我有一个类方法 在其中创建并返回类对象 但我想访问同一类中该对象的某些属性 作为一个类方法 我无法在 h 文件中声明该变量 然后在其他方法中访问它 以下是代码 我如何在下面的实例方法中访问 backsprite 或 hudlayer 对象的
  • 将多个数组合并为一个数组

    如何将多个数组合并为一个二维数组 鉴于我有以下输入 var arr1 1 2 3 var arr2 a b c var arr3 aa bb cc 我需要这样的输出 1 a aa 2 b bb 1 c cc 我认为你想要的是将三个数组组合成
  • 连接到 Apple Music

    所以我尝试使用 React Native 应用程序从 iOS 设备连接到 Apple Music 有一个 API 可以执行相同的操作 但我需要从 storekit 框架调用一个函数 提出个性化请求 苹果音乐API https develop
  • Xcode 本地化设置中没有加号或减号按钮

    我需要在两天内翻译 iOS 应用程序 但我的 XCode 版本 4 4 和 4 5 Developer Preview 都没有给我添加其他语言的选项 我只能选择单击 Make localized 但我只能选择英语 选择它后 Xcode 中的
  • 获取 Swift 子目录中资源的所有 URL

    我正在尝试为 iOS 应用程序的子目录中的所有资源创建 URL 数组 我似乎无法到达正确的路径 即使我不知道名称 我也希望能够检索 URL 即我不想将文件名硬编码到代码中 Below is a screen shot of the hier
  • 子视图控制器旋转方法未被调用

    Summary 我试图将子视图控制器添加到父视图控制器 并让父视图控制器通知子视图控制器旋转事件 但是 旋转消息不会转发到子视图控制器 这是默认行为 为什么这种默认行为没有发生 环境 iOS 7 XCode 5 OSX 10 9 Detai
  • SDWebImage 显示缓存中图像的占位符

    在 iOS 5 1 项目 iPad 中使用 SDWebImage 3 我们展示相当大的图像 700x500 并且我们有很多图像 1000 我们预取图像并缓存到磁盘 然后允许用户浏览它们 效果很好 除了当您浏览图像时 您总是会看到占位符显示一
  • 带约束的 Swift 动画

    是否可以通过改变约束来制作 UIView 动画 基本上 我想要动画myv UIView 具有 x y 高度和宽度约束 使用 UIView animateWithDuration 1 5 通过改变旧的限制 是的 这是可能的 你可以这样做 fu
  • iOS:addConstraints:应用程序崩溃

    Problem 我似乎无法在现有项目中采用自动布局 Details 我之前也遇到过与此问题相同的问题presentViewController 在 iOS 但所提供的答案都不是我的解决方案 我正在使用所有没有 xib 的故事板视图 我的 使
  • iOS 11 getUserMedia 不起作用?

    苹果公司发表声明称getUserMedia将在 iOS 11 上完全正常运行 安装 iOS 11 Beta 版本 5 后 我确实收到一条消息 表明我的网站请求访问我的相机和麦克风 但似乎是这样的 video src window URL c
  • extern NSString *const 在类中。

    你好 我有这个头文件 import

随机推荐

  • 通过更改 React-intl 包装器属性切换语言时,我的 redux-form 被重新初始化

    我正在将我的应用程序包装在IntlProvider from react intl v2 像这样
  • 在python中显示jpg图像

    我正在创建一个简单的工具 用于将专辑封面图像添加到 python 中的 mp3 文件中 到目前为止 我只是致力于向亚马逊发送包含艺术家和专辑标题的请求 并获取结果列表 以及查找每个结果的实际图像 我想要做的是显示一个简单的框架 其中每个图像
  • 如何使用 ASP.NET MVC 和 AngularJS 路由?

    我正在开发一个新的 ASP NET MVC 和 AngularJS 应用程序 该应用程序旨在成为 SPA 的集合 我使用 MVC 区域概念来分隔每个单独的 SPA 然后在每个 MVC 区域中使用 AngularJS 来创建 SPA 由于我是
  • 是否可以防止在输出 UTF-8 文件时添加 BOM? (视觉工作室 2005)

    我需要一些帮助 我正在编写一个程序 以 UTF 8 编码打开 2 个不带 BOM 的源文件 第一个包含英文文本和一些其他信息 包括 ID 第二个仅包含字符串 ID 和翻译 该程序通过将第二个文件中的英文字符替换为俄语翻译来更改第一个文件中的
  • 如何解码 Stack Exchange API 响应

    我正在尝试检索堆栈交换 api 的响应 例如 我正在使用以下代码来检索响应 import java io BufferedReader import java io IOException import java io InputStrea
  • Android 2.0 联系人组操作

    我会在 Android 2 O 中操作联系人组 我的代码如下 要获取组列表 带有 id 和标题 final String GROUP PROJECTION new String ContactsContract Groups ID Cont
  • Android 中的语音到文本转换

    您好 我需要在 Android 中进行语音到文本转换的帮助 我已经在谷歌上搜索这个主题一个小时了 我找到的每个帮助都向我展示了如何将文本转换为语音 而不是相反 http android developers blogspot com 200
  • onActivityResult 未在从 ArrayAdapter 扩展的类中调用

    我进行了搜索 但在互联网上找不到有用的答案 这就是我提出质疑的原因 我喜欢加载相机并捕捉图像getView自定义 ArrayAdapter 类的方法 相机已加载并捕获图像 但onActivityResult 从未被调用过 我的代码如下所示
  • 此应用程序与此设备 iOS 不兼容

    When I update my iOS version from 9 3 to 9 3 1 then go to app store to install the app we get popup this app is not comp
  • 如何从 PHP 数组中回显一定数量的元素

    如果我有一个包含 100 个元素的数组 我如何仅回显 显示前 5 个元素 谢谢 See LimitIterator and ArrayIterator array range 1 100 iterator new LimitIterator
  • 如何验证 google openid 响应

    我正在尝试向我的用户添加授权抛出 google openid 我收到了 ID https www google com accounts o8 id id AIt Ew Bo 但我如何检查它是否合法 我的意思是用户可以使用另一个用户的电子邮
  • Java 高级成像 API 中的快速透视变换

    为了满足我的程序的需要 我创建了一个工具来扭曲图像并将其放置在地图上 我的程序是基于地图的程序 我编写了自己的机制 使用放置在图像上的三个点 放置在地图上的三个点来放置和扭曲图像 然后我简单地创建一个 AffineTransform 实际上
  • ImageMagick PDF 到 JPG 的转换结果出现在图像应在的绿色方块中

    我正在尝试使用 ImageMagick 将 PDF 转换为 JPEG PDF baby aRCWTU pdf 命令 convert density 260 profile SWOP icc profile sRGB icm baby aRC
  • Sencha Architect 3 不使用 app.css

    我正在尝试将自定义字体图标添加到我的 sencha Architect 项目中 并删除不必要的主题类 但似乎 Sencha Architect 根本不使用 app scss 位于我项目的 resources sass 文件夹中 我所做的更改
  • 如何向gridview添加复选框列

    如何向 gridview 添加复选框列 我试过了 foreach GridViewRow objRow in GridView1 Rows TableCell tcCheckCell new TableCell CheckBox chkCh
  • CocoaPods 停止安装 Firebase/Analytics,但出现错误

    我昨天已经将 Firebase Analytics 安装到了一个 iOS 项目中 我之前已经做过很多次了 今天我想添加 Firebase Crashlytics 突然它们都不再工作了 我收到以下错误消息 CocoaPods 找不到 pod
  • jcop 小程序上传错误

    我是 Java 卡开发的新手 我用jcop工具作为开发套件 当我在 Eclipse 中运行简单的小程序时 出现此错误 在运行配置中我选择Java卡模拟模式 在模拟模式下成功安装后 我想在java卡中安装应用程序 cm gt upload b
  • 如何找到两种颜色之间的所有颜色?

    我需要选择两种颜色 然后在它们之间找到 X 种颜色 或色调 每种颜色之间的 距离 相同 我还是不明白颜色是如何形成的 我应该尝试使用 HSV RGB 还是十六进制 除非你真的知道什么kind您需要多少种颜色 获得所有颜色几乎是不可能的bet
  • R 添加具有预定义模式的新列

    我正在尝试学习如何提供可重现的 R 示例以防我将来需要一个 我用SimSurv 函数 我想向其中添加六个新列 二进制变量 这些列的值不应平行或相交 var1元素 1 到 100 的值必须为 1 其余为 0 var2将从 101 开始到 20
  • Swift - 如何在 UITableViewCell 中使用 CollectionViewCell 打开另一个视图控制器

    我对 iOS Swift 非常陌生 而且我正在进行一个小项目 在这个项目中 我在 ViewController 中有一个 UITableView 我在 UITableViewCell 旁边有另一个文件自定义 CollectionViewCe