繁体   English   中英

CollectionView细胞序列

[英]CollectionView Cell segue

我在CollectionView单元格中的thumbnailImage上有一个轻击手势,并且当我将其推到/演示/等到没有情节提要的另一个View Controller上时,它可以工作,因为我实现了情节提要不再起作用,并且尝试了许多不同的解决方案并且没有过渡。 我将课程设置在情节提要上,但一切均以编程方式完成。 我想知道是否有任何方法可以从当前ViewController切换到CollectionView单元中的其他方法。

情节提要的图片:

在此处输入图片说明

这是模拟器中的样子:

在此处输入图片说明

import UIKit

    class Cell: UICollectionViewCell{

        override init(frame: CGRect) {
            super.init(frame: frame)
            setupViews()

            let tapRecognizer: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(Tap(recognizer:)))
            thumbnailImage.isUserInteractionEnabled = true
            thumbnailImage.addGestureRecognizer(tapRecognizer)

        }

        func setupViews(){
            addSubview(thumbnailImage)
            addSubview(separatorView)
            addSubview(brandName)
            addSubview(Priceing)
            addSubview(model)


            addConstraintsWithFormat(format: "H:|-16-[v0]-16-|", views: thumbnailImage)
            addConstraintsWithFormat(format: "H:|[v0]|", views: separatorView)

            //Vertical Contsraint
            addConstraintsWithFormat(format: "V:[v0(200)]-87-[v1(1)]|", views: thumbnailImage, separatorView)
            addConstraintsWithFormat(format: "V:[v0(20)]", views: brandName)
            addConstraintsWithFormat(format: "V:[v0(20)]", views: Priceing)
            addConstraintsWithFormat(format: "V:[v0(20)]", views: model)

            addConstraint(NSLayoutConstraint(item: brandName, attribute: .top, relatedBy: .equal, toItem: thumbnailImage, attribute: .bottom, multiplier: 1, constant: 8))
            addConstraint(NSLayoutConstraint(item: brandName, attribute: .right, relatedBy: .equal, toItem: thumbnailImage, attribute: .right, multiplier: 1, constant: 0))
            addConstraint(NSLayoutConstraint(item: brandName, attribute: .left, relatedBy: .equal, toItem: thumbnailImage, attribute: .left, multiplier: 1, constant: 0))

            addConstraint(NSLayoutConstraint(item: Priceing, attribute: .top, relatedBy: .equal, toItem: brandName, attribute: .bottom, multiplier: 1, constant: 4))
            addConstraint(NSLayoutConstraint(item: Priceing, attribute: .right, relatedBy: .equal, toItem: brandName, attribute: .right, multiplier: 1, constant: 0))
            addConstraint(NSLayoutConstraint(item: Priceing, attribute: .left, relatedBy: .equal, toItem: brandName, attribute: .left, multiplier: 1, constant: 0))

            addConstraint(NSLayoutConstraint(item: model, attribute: .top, relatedBy: .equal, toItem: Priceing, attribute: .bottom, multiplier: 1, constant: 4))
            addConstraint(NSLayoutConstraint(item: model, attribute: .right, relatedBy: .equal, toItem: Priceing, attribute: .right, multiplier: 1, constant: 0))
            addConstraint(NSLayoutConstraint(item: model, attribute: .left, relatedBy: .equal, toItem: Priceing, attribute: .left, multiplier: 1, constant: 0))
        }

        let separatorView: UIView = {
            let view = UIView()
            view.backgroundColor = UIColor(displayP3Red: 230/255, green: 230/255, blue: 230/255, alpha: 1)
            view.translatesAutoresizingMaskIntoConstraints = false
            return view
        }()

        let brandName: UILabel = {
            let label = UILabel()
            label.translatesAutoresizingMaskIntoConstraints = false
            label.backgroundColor = UIColor.rgb(displayP3Red: 211, green: 211, blue: 211)
            label.numberOfLines = 2
            return label
        }()

        let model: UILabel = {
            let label = UILabel()
            label.translatesAutoresizingMaskIntoConstraints = false
            label.backgroundColor = UIColor.rgb(displayP3Red: 211, green: 211, blue: 211)
            label.numberOfLines = 1
            return label
        }()

        let Priceing: UILabel = {
            let textView = UILabel()
            textView.translatesAutoresizingMaskIntoConstraints = false
            textView.numberOfLines = 1
            textView.backgroundColor = UIColor.rgb(displayP3Red: 211, green: 211, blue: 211)
            return textView
        }()

        let thumbnailImage: UIImageView = {
            let image = UIImageView()
            image.backgroundColor = UIColor.rgb(displayP3Red: 211, green: 211, blue: 211)
            image.contentMode = .scaleAspectFill
            image.clipsToBounds = true
            return image
        }()

        @objc func Tap(recognizer: UITapGestureRecognizer){
            let vc = DescriptionViewController()
    //        let nc = self.window?.rootViewController?.navigationController
    //        let transition = CATransition()
    //        transition.duration = 0.3
    //        transition.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
    //        transition.type = kCATransitionMoveIn
    //        transition.subtype = kCATransitionFromTop
    //        nc?.navigationController?.view.layer.add(transition, forKey: nil)
            self.window?.rootViewController?.navigationController?.pushViewController(vc, animated: false)
        }



        required init?(coder aDecoder: NSCoder) {
            fatalError("init(coder:) has not been implemented")
        }
    }

使用此扩展名找到您的UIViewUIViewController

extension UIView {

    var parentViewController: UIViewController? {
        var parentResponder: UIResponder? = self
        while parentResponder != nil {
            parentResponder = parentResponder!.next
            if let viewController = parentResponder as? UIViewController {
                return viewController
            }
        }
        return nil
    }
}

在您的项目中添加此扩展名,然后像这样调用

    if let vc = self.parentViewController as? YourPresentedViewController{
        let pushVc = DescriptionViewController()
        vc.navigationController?.pushViewController(pushVc, animated: true)
    }

注意 :-在YourPresentedViewController添加了UITableView ,因此我的tableview parentViewController是YourPresentedViewController。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM