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

在tableview内的collectionview单元格的单击上导航

阳福
2023-03-14
问题内容

我有一个tableview单元格,其中添加了collectionview单元格(用于水平滚动)。

现在我想在按下水平collectionview的任何单元格时推送到其他导航控制器。怎么做 ?或如何定义细胞压榨的委托方法。

代码:

ViewController.swift:

class ViewController: UIViewController {
    var categories = ["Action", "Drama", "Science Fiction", "Kids", "Horror"]
}

extension ViewController : UITableViewDelegate { }

extension ViewController : UITableViewDataSource {

    func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
        return categories[section]
    }

    func numberOfSections(in tableView: UITableView) -> Int {
        return categories.count
    }

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

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell") as! CategoryRow
        return cell
    }

}

CategoryRow.swift

class CategoryRow : UITableViewCell {
    @IBOutlet weak var collectionView: UICollectionView!
}

extension CategoryRow : UICollectionViewDataSource {

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

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "videoCell", for: indexPath) as! VideoCell
        return cell
    }

}

extension CategoryRow : UICollectionViewDelegateFlowLayout {

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
        let itemsPerRow:CGFloat = 4
        let hardCodedPadding:CGFloat = 5
        let itemWidth = (collectionView.bounds.width / itemsPerRow) - hardCodedPadding
        let itemHeight = collectionView.bounds.height - (2 * hardCodedPadding)
        return CGSize(width: itemWidth, height: itemHeight)
    }

}

VideoCell.swift

class VideoCell : UICollectionViewCell {

    @IBOutlet weak var imageView: UIImageView!
}

问题答案:

在这里,您将didSelectItemAtIndexPathCategoryRow类上的委托方法上单击单元格,然后可以在其中触发委托以在ViewController
ViewController.swift 内部进行调用:

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
            let cell = tableView.dequeueReusableCell(withIdentifier: "cell") as! CategoryRow
            cell.delegate = self
            return cell
        }

VideoCell.swift

    protocol CategoryRowDelegate:class {
    func cellTapped()
    }

CategoryRow.swift

    class CategoryRow : UITableViewCell {
         weak var delegate:CategoryRowDelegate?
        @IBOutlet weak var collectionView: UICollectionView!
    }

     func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
    if delegate!= nil {
    delegate?.cellTapped()
    }
    }

在内部添加委托函数 ViewController

func cellTapped(){
//code for navigation
}


 类似资料:
  • 我有一个tableView在几个ColltionView单元格中。每个tableView占据了单元格的全部大小。ColltionView是水平滑动的。 收藏视图: 集合视图单元格内的表视图: tableView将重新加载到CollectionView的cellForItemAt下,并具有自定义单元格。自定义tableView单元格包含几个小视图,这些视图被添加到名为“cellView”的单个视图中

  • 我试图根据单击的tableView单元格呈现一个viewController。 当前,如果它们都被点击,它们将重定向到相同的viewController,我将如何改变这一点? 我能在手机标签上做一个if ell.text吗?如if(celllabel.text==“Option8){func tableView(tableView:UITableView,DidSelectRowIndexPath

  • 我们刚刚开始实施NatTable,我们非常高兴看到性能的提高。然而,我们在实现特定功能时遇到了困难。 我们想要的是在单元格中有可点击的文本,然后它将引用我们选择并进入视图的表中的一行。基本上,类似于: 通过单击。

  • 问题内容: 我正在尝试获取所选项目,然后开始一些活动。不幸的是,我发现的大多数解决方案都在Objective-C或不起作用。 方法不打印标签。 有人可以帮我吗? 经过几次尝试,我将代码更改为与我发现的教程不同的代码。而且它也不起作用。现在我认为这是iOS模拟器的问题… 问题答案: 如果您想从单元格中获取值,则无需在 任务如下: 您还必须检查您必须设置的标识符。 希望能帮助到你。

  • 问题内容: 我正在将AutoSizing单元格与Autolayout和UICollectionView一起使用。 我可以在单元初始化的代码中指定约束: 但是,由于该单元尚未添加到中,该应用程序崩溃了。 问题 在该阶段的生命周期,可以添加一个约束的? 有没有作出任何默认方式的equal to the of thewithout accessing an instance of or? 编辑 这个问题

  • 我正在做一个使用javafx多种输入类型的java项目。但我有一个扼杀组合框的行为,因为我使用的标签上的图像(ImageView)。 1-组合框看起来在白色!但我需要它在黑色。 每次我选择一个项目。 3-它消失了!!! 下面是我的代码: 和 编辑: 读了这篇文章后,我知道我的方法完全错误,强烈不推荐。。如果有人有其他想法在组合框中放置国家国旗,请帮助!! 谢谢(抱歉我的英语不好)