在这种情况下,如何在UIPickerView中重用视图? [英] How do I reuse a view inside UIPickerView in this case?

查看:89
本文介绍了在这种情况下,如何在UIPickerView中重用视图?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

似乎很多人只是返回一个UILabel,但在我的例子中,我是在向一个视图添加一个标签。风景永远不会不是空的。这是UIPickerView的另一种用法,因为我将其组件旋转90度,并使其横向滚动,而不是上下滚动。

func pickerView(_ pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusing view: UIView?) -> UIView {

    if view == nil {

        let customWidth = 300
        let customHeight = 300

        let view = UIView(frame: CGRect(x:0, y:0, width:customWidth, height:customHeight))

        let label = UILabel(frame:CGRect(x:0, y:0, width:customWidth, height:customHeight))
        if let filter = filters.first(where: {$0.pickerViewRowIndex == row}) {
            var leading = ""
            if appPurchased == false && filter.requiresPurchase == true { leading = "🔒" }
            label.text = "(leading)(filter.nameStr)"
        }
        label.textColor = UIColor.black 
        label.font = UIFont(name:"HelveticaNeue-Bold", size: 18.0)
        label.textAlignment = .center

        view.addSubview(label)

        view.transform = CGAffineTransform(rotationAngle: 90 * (.pi/180))
        label.layer.masksToBounds = false

        return view

    }else{
        print("not nil") // console never prints this line
    }

    guard let reusedView = view else {
        assertionFailure("pickerView label view container never set")
        return view!
    }

    return reusedView
}

推荐答案

视图永远不会不是空的。

正确。医生说错了。实际上,在选取器视图viewForRow中不存在重用视图这回事。你总是需要创建一个新的视图,然后将其返回。

这篇关于在这种情况下,如何在UIPickerView中重用视图?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆