' numberOfComponents(in:)'的重新声明无效。错误

时间:2018-01-23 02:25:35

标签: ios swift xcode components

这是我的代码。我会说我已采取的步骤,但它们没有意义,我会被取笑,我对Swift和Xcode很新。但是如何声明一组组件?我以为我把它们分开了,我老老实实地搜索了指南,但没有人真正关注下拉列表中的下拉列表和变量。

import UIKit

class SecondViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource  {

    @IBOutlet weak var backBTN: UIButton!
    @IBOutlet weak var label: UILabel!
    @IBOutlet weak var labelTwo: UILabel!
    @IBOutlet weak var pickerView: UIPickerView!
    @IBOutlet weak var pickerviewTwo: UIPickerView!

    var pickerData = ["X", "Y"]
    var pickerdataTwo = ["R","D","C"]

    override func viewDidLoad() {
        super.viewDidLoad()
        pickerView.delegate = self
        pickerView.dataSource = self
        pickerviewTwo.delegate = self
        pickerviewTwo.dataSource = self

    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    func numberOfComponents(in pickerView: UIPickerView) -> Int {
        return 1
    }

    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        return pickerData.count
    }

    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
        return pickerData[row]
    }

    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
        label.text = pickerData[row]
    }

    func numberOfComponents(in pickerviewTwo: UIPickerView) -> Int {
        return 1
    }

    func pickerviewTwo(_ pickerviewTwo: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        return pickerdataTwo.count
    }

    func pickerviewTwo(_ pickerviewTwo: UIPickerView, titleForRow row: Int, forComponent
    component: Int) -> String? {
        return pickerdataTwo[row]
    }

    func pickerviewTwo(_ pickerviewTwo: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
        labelTwo.text = pickerdataTwo[row]
    }
}

1 个答案:

答案 0 :(得分:0)

您的选择器视图代码错误。首先,我建议将其名称从pickerViewpickerViewTwo更改为更具描述性的内容。

选择器视图所需的功能不能多次使用,因此您将收到错误。正确的方法是:

func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent
component: Int) -> String? {

//After renaming the first pickerView to topPickerView
if pickerView == topPickerView {
    return pickerData[row]
}
else {
    return pickerDataTwo[row]
} 
}

每个必需的函数都应该有一个if-else,if语句用{else}语句表示if pickerView == oneOfThePickerViewsName。发生的事情是当拣货员正在设置时,它会检查它是哪个拣货员并使用代码。 以下是其余部分的格式:

//pickerView has been renamed to topPickerView
func numberOfComponents(in pickerView: UIPickerView) -> Int {
    //You wouldn't need to do this here as its the same for both of them.
    //
    if pickerView == topPickerView
    {
        return 1
    }
    else
    {
        return 1
    }
}

func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
    if pickerView == topPickerView
    {
        return pickerData.count
    }
    else
    {
        return pickerdataTwo.count
        // should actually be formatted pickerDataTwo because of camelCase.
    }
}

func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent
    component: Int) -> String? {
    if pickerView == topPickerView
    {
        return pickerData[row]
    }
    else
    {
        return pickerdataTwo[row]
        // should actually be formatted pickerDataTwo because of camelCase.
    }
}

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent
    component: Int) {
    if pickerView == topPickerView
    {
        label.text = pickerData[row]
    }
    else
    {
         labelTwo.text = pickerdataTwo[row]
        // should actually be formatted pickerDataTwo because of camelCase.
    }
}