【问题标题】:Picker View crash when scroll down向下滚动时选择器视图崩溃
【发布时间】:2015-10-17 17:12:09
【问题描述】:

我正在构建一个“日期”UiPickerView,以便能够自定义字体大小、类型和颜色。

请看我的代码。

{

    @IBOutlet weak var dataInicio: UIPickerView!

    var dataDia1: NSMutableArray!
    var dataMes1: NSArray!
    var dataAno1: NSMutableArray!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

        self.dataDia1 = NSMutableArray()

        for dia in 1...31
        {
            dataDia1.addObject("\(dia)")
        }

        self.dataMes1 = NSArray(objects: "Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro")

        self.dataAno1 = NSMutableArray()

        for ano in 1970...2016
        {
            dataAno1.addObject("\(ano)")
        }


    }

    func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int
    {
        return 3
    }

    func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int
    {
        if (component == 0)
        {
            return dataDia1.count
        }

        if (component == 1)
        {
            return dataMes1.count
        }

        else
        {
            return dataAno1.count
        }
    }

    func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String?
    {
        var componentStr = dataDia1[row]

        if(component == 0)
        {
            return componentStr as? String
        }

        if(component == 1)
        {
            componentStr = (dataMes1[row] as? String)!
            return componentStr as? String

        }
        else
        {
            componentStr = (dataAno1[row] as? String)!
            return componentStr as? String
        }
    }

}

它构建成功,但是当我向下滚动年份时,当数组中有超过 27 个组件时它会崩溃。

我正在发起此操作,但我已经浏览了网络,但一无所获。 :(

我做错了什么?

【问题讨论】:

    标签: ios swift uipickerview


    【解决方案1】:

    无论请求哪个组件,您都调用var componentStr = dataDia1[row]。将您的代码更改为:

    func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String?
    {
        if(component == 0)
        {
            var componentStr = dataDia1[row]
            return componentStr as? String
        }
        else if(component == 1)
        {
            var componentStr = (dataMes1[row] as? String)!
            return componentStr as? String
    
        }
        else
        {
            var componentStr = (dataAno1[row] as? String)!
            return componentStr as? String
        }
    }
    

    还要注意else if的使用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-14
      • 2023-01-12
      相关资源
      最近更新 更多