首页 > 解决方案 > 如何防止选择器视图重复

问题描述

我有一个使用以下代码创建 UIPickerView 的扩展

extension FirstVC {
    func createPicker() -> UIPickerView {
        let customPicker = UIPickerView(frame: CGRect(x: 0, y: 0, width: 400, height: 216))
        customPicker.backgroundColor = .white
        return customPicker
    }
}

我有一个存储属性,它通过我的视图控制器中的闭包进行初始化

private var proxyPeoplePicker: UIPickerView {
   return createPicker()
}

我还有 5 个选择器视图,为了防止重复,我试图在上面的存储属性下方使用,但它不起作用,当我尝试获取内部信息时,它总是返回它的初始值。可能是什么原因,如何防止这些选择器视图出现代码重复?

标签: iosswiftuipickerview

解决方案


计算属性就像一个函数。确保此类属性的结果始终与其依赖项的当前状态保持同步可能很有用。

func createPicker() -> UIPickerView {
    let customPicker = UIPickerView(frame: CGRect(x: 0, y: 0, width: 400, height: 216))
    customPicker.backgroundColor = .white
    return customPicker
}

在您的情况下,此类计算属性不依赖任何内容,并且在您引用时始终返回 UIPickerView 的新实例proxyPeoplePicker

您真正想要实现的是使用视图控制器初始化的存储属性。它只计算一次并保持不变,直到您覆盖它。这是你需要做的,有 5 个 pickerView 实例可以操作:

class FirstVC : UIViewController {

    private var pickerView1: UIPickerView?
    private var pickerView2: UIPickerView?
    private var pickerView3: UIPickerView?
    private var pickerView4: UIPickerView?
    private var pickerView5: UIPickerView?

    override func viewDidLoad() {
        pickerView1 = createPicker()
        pickerView2 = createPicker()
        pickerView3 = createPicker()
        pickerView4 = createPicker()
        pickerView5 = createPicker()

        // now you can operate with your picker view

        pickerView1?.backgroundColor = .black
    }
}

推荐阅读