自定义UIView类中的Swift设置变量

时间:2018-07-18 11:54:59

标签: swift

我已经从xib(profileView)设置了自定义视图。当我在“ chatPage”类中选择一个单元格时,我试图在配置文件类中设置令牌变量,并在视图加载时将其打印出来。

下面的代码不会输出令牌,令牌为空,我无法使其正常工作。

我将如何实现这一目标?

chatPage.swift

  func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
       // Pass the user token to the profileView class.
        profileView().token = filteredArray[indexPath.row].token
         view.addSubview(profileView.create(height: view.frame.height, width: view.frame.width, x: view.frame.origin.x, y: view.frame.origin.y, tag: 104))
    }

自定义profileView类:

class profileView: UIView, UIScrollViewDelegate {

    var token: String?

    @IBOutlet var scrollView: UIScrollView!
    @IBOutlet var nameLabel: UILabel!

    static func create(height: CGFloat,width:CGFloat,x:CGFloat,y:CGFloat,tag: Int) -> UIView{
        profileView().token = "1"
        let key = UINib(nibName: "profileView", bundle: nil).instantiate(withOwner: nil, options: nil)[0] as! UIView
        key.frame.size.height = height
        key.frame.size.width = width
        key.frame.origin.x = x
        key.frame.origin.y = y
        key.tag = tag
        return key
    }
    override init(frame: CGRect) {
        super.init(frame: frame)
    }
    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }
    override func awakeFromNib() {
        super.awakeFromNib()
        //custom logic goes here
    }
    func scrollViewDidScroll(_ scrollView: UIScrollView) {
        if(scrollView.contentOffset.y < -60){
            UIView.animate(withDuration: 1.0, delay: 0.0, options: [], animations: {
               self.frame.origin.y += self.frame.height
            }, completion: { (finished: Bool) in
                self.removeFromSuperview()
            })
        }
    }

}

1 个答案:

答案 0 :(得分:0)

考虑您的工作顺序。你在说

profileView().token = filteredArray[indexPath.row].token

然后在下一行中说

profileView.create

的作用是什么?

profileView().token = "1"

首先,您要实例化profileView并设置其令牌。然后,您将其丢弃。然后,实例化另一个 profileView并将令牌设置为1。因此,您的第一个代码也完全没有用。

此外,profileView.create还会丢弃 profileView。因此,您的第二代码完全没有用。这就是您到目前为止创建并丢弃的两个视图。

最后,通过从笔尖加载第三视图来创建视图。那是您实际进行任何操作的唯一方法。但这只是一个UIView,而不是profileView,即使它是profileView,也从不设置其令牌。