当前位置: 首页 > 面试题库 >

iOS 8 Swift-具有嵌入式CollectionView的TableView

秦经义
2023-03-14
问题内容

我对iOS编程比较陌生,并且尝试了一些尝试但无济于事。

我想在CollectionView里面放一个TableViewCell。我可以单独每个代码,但不知道如何设置和引用每个CollectionViewTableViewCell

我在http://ashfurrow.com/blog/putting-a-uicollectionview-in-a-
uitableviewcell/中
找到了本教程,该教程显示了如何在Objective-C中完成此操作,但我一直都在为Obj-C苦苦挣扎。

有谁知道Swift教程或可以提供帮助吗?我正在创建一个简单的项目/代码,我将稍后发布以尝试和帮助。

编辑1

我刚刚找到了上面链接的快速版本。我现在正在解决此问题,但修改AppDelegate似乎过于复杂。

https://github.com/DahanHu/DHCollectionTableView

非常感谢Rob


问题答案:

创建一个普通的UITableView并在UITableViewCell中创建UICollectionView。您的collectionView委托和数据源应符合该UITableViewCell。

只是通过这个

在您的ViewController中

// Global Variable
var tableView: UITableView!

override func viewDidLoad() {
    super.viewDidLoad()

tableView = UITableView(frame: self.view.bounds)
    tableView.delegate = self
    tableView.dataSource = self
    self.view.addSubview(tableView)

    tableView.registerClass(TableViewCell.self, forCellReuseIdentifier: "TableViewCell")
    tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "NormalCell")
}

func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    return 1
}

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return 5
}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    if indexPath.row == 3 {
        var cell: TableViewCell = tableView.dequeueReusableCellWithIdentifier("TableViewCell", forIndexPath: indexPath) as! TableViewCell
        cell.backgroundColor = UIColor.groupTableViewBackgroundColor()
        return cell

    } else {
        var cell: UITableViewCell = tableView.dequeueReusableCellWithIdentifier("NormalCell", forIndexPath: indexPath) as! UITableViewCell
        cell.textLabel?.text = "cell: \(indexPath.row)"

        return cell
    }
}

如您所见,我创建了两个不同的单元格,一个自定义TableViewCell仅在行索引为3时返回,而在其他索引中则返回一个基本UITableViewCell。

自定义“ TableViewCell”将具有我们的UICollectionView。因此,创建一个UITableViewCell子类并写下以下代码。

import UIKit

class TableViewCell: UITableViewCell, UICollectionViewDataSource, UICollectionViewDelegate {

var collectionView: UICollectionView!

override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
    super.init(style: style, reuseIdentifier: reuseIdentifier)

    let layout = UICollectionViewFlowLayout()
    layout.scrollDirection = UICollectionViewScrollDirection.Horizontal

    collectionView = UICollectionView(frame: self.bounds, collectionViewLayout: layout)
    collectionView.delegate = self
    collectionView.dataSource = self
    collectionView.registerClass(UICollectionViewCell.self, forCellWithReuseIdentifier: "CollectionViewCell")
    collectionView.backgroundColor = UIColor.clearColor()

    self.addSubview(collectionView)
}

required init(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
}

// MARK: UICollectionViewDataSource
func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int {
    return 1
}


func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    return 10
}

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
    let cell: UICollectionViewCell = collectionView.dequeueReusableCellWithReuseIdentifier("CollectionViewCell", forIndexPath: indexPath) as! UICollectionViewCell
    if indexPath.row%2 == 0 {
        cell.backgroundColor = UIColor.redColor()
    } else {
        cell.backgroundColor = UIColor.yellowColor()
    }

    return cell
}
}

希望能帮助到你。



 类似资料:
  • 我在一个POC中使用了最近嵌入的Spring数据Neo4j。它在一台机器上快速工作。在投入生产之前,我想将数据库与应用服务器分离。我配置了三个Neo4j服务器实例和HA代理,并使用Spring数据Neo4j Rest进行连接。但速度最差。每个查询的执行时间超过30秒。 我正在考虑使用嵌入HA的Neo4j?有人能给我提供链接/教程,用HA代理在嵌入式模式下配置Spring Data Neo4j吗。

  • 问题内容: 我正在使用Toplink Essentials(JPA)+ GlassFish v3 + NetBean 6.9 我有一个带有复合主键的表: 我创建了2个实体类,一个是实体本身,第二个是PK类。 现在.. 我该如何在WHERE中用JPQL编写SELECT子句? 这失败了。 http://www.mail- archive.com/users@openjpa.apache.org/msg

  • 问题内容: 包: struct中的匿名接口是什么意思? 问题答案: 通过这种方式,反向实现了,我们可以覆盖特定的方法而不必定义所有其他方法 请注意,这里是如何交换而不是交换的,这也是为struct声明的唯一方法,即使实现 无论此方法内部传递了什么结构,我们都会将其转换为新的结构。 真正的价值在于,如果您认为如果无法采用这种方法,该怎么办。 向吗?添加另一种方法? 创建另一个ReverseInter

  • Extends Widget A scrollable list that displays data items in cells, one per row. Cells are created on demand by the createCell callback and reused on scrolling. Import this type with “const {Collectio

  • 实现类似Pinterest的瀑布流视图显示形式,支持显示图片和文字。 [Code4App.com]

  • 问题内容: 说,我有以下实体: 通过结合使用模式自动生成功能,我得到了一个附加表,其中包含和之间的映射。但是,我想实现通过添加一个一对多的关系的 编号 为( 例如,没有附加表 )。 这可能吗?如果是,我应该使用什么注释来创建这种映射? 问题答案: 通常,使用@JoinColumn批注是可能的。它也适用于可嵌入对象。 如果您对embeddable中指定的列的A_ID名称不满意,则可以覆盖实体A中的列