UIPickerViewDelegate Xcode 8 Swift 3

UIPickerViewDelegate Xcode 8 Swift 3,swift,swift3,uipickerview,Swift,Swift3,Uipickerview,我的代码是: class ViewController: UIViewController,UIPickerViewDelegate, UIPickerViewDataSource { @IBOutlet weak var picherview: UIPickerView! var prodotti = ["AAAAA", "VVVV", "CCCC"] override func viewDidLoad() { super.viewDidLoad()

我的代码是:

class ViewController: UIViewController,UIPickerViewDelegate, UIPickerViewDataSource {
    @IBOutlet weak var picherview: UIPickerView!

    var prodotti = ["AAAAA", "VVVV", "CCCC"]

    override func viewDidLoad() {
        super.viewDidLoad()
        self.picherview.dataSource = self
        self.picherview.delegate = self
        // Do any additional setup after loading the view, typically from a nib.
    }

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

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

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

    func pickerview( _ : UIPickerView, titleForRow row: Int, forComponent component: Int) -> String! {
        return prodotti[row]
    }     //ci consente di determinare quale riga è stata selezionata

    func pickerview(_ : UIPickerView, didSelectRow row: Int, inComponent component: Int) {
        print("Hai selezionato: \(prodotti[row])")}
    }
此代码有错误:

类型“ViewController”不符合协议“UIPickerViewDataSource”


任何解决方案?

正确的PickerView语法Swift 3

// DataSource
func numberOfComponents(in pickerView: UIPickerView) -> Int {

}
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {

}

// Delegate

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

}
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {

}

Swift 3中带完成按钮的PickerView完整示例

  • 首先,在swift 3中创建一个单视图应用程序。拖动文本字段并连接到视图控制器
  • 在两个名为UIPickerViewDelegate、UIPickerViewDataSource的PickerView协议中实现
  • UIPickerViewDelegate&UIPickerViewDataSource需要实现numberOfComponents、numberOfRowsInComponent、titleForRow等方法
  • 选择器视图如下图所示
  • 下面给出了完整的源代码

     class ViewController:UIViewController,UIPickerViewDelegate,UIPickerViewDataSource {
    //Text field Connect
     @IBOutlet weak var txtPickerTextField: UITextField!
    //Array declare
     let pickerArray = ["Bangladesh","India","Pakistan","USA"]
    var selectedRow = 0;
    //Picker View Object
    let picker = UIPickerView()
    
      override func viewDidLoad() {
       super.viewDidLoad()
       //Don't forget to initialize pickerview delegate & datasource
       picker.delegate = self
        picker.dataSource = self
       txtPickerTextField.inputView = picker
       //Done Button function called
        doneButton();
     }
       public func numberOfComponents(in pickerView:  UIPickerView) -> Int  {
        return 1
      }
    
         func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
         return pickerArray.count
        }
    
        public func pickerView(_pickerView:UIPickerView,numberOfRowsInComponent component: Int) -> Int {
             return pickerArray.count
         }
    
        func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
          return pickerArray[row]
        }
        func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
           selectedRow = row;
           txtPickerTextField.text = pickerArray[row]
           self.view.endEditing(false)
         }
    
         //begin  Doen Button function
        func doneButton(){
    
         let pickerView = picker
         pickerView.backgroundColor = .white
         pickerView.showsSelectionIndicator = true
    
         var toolBar = UIToolbar()
         toolBar.barStyle = UIBarStyle.default
         toolBar.isTranslucent = true
         toolBar.tintColor = UIColor(red: 76/255, green: 217/255, blue: 100/255, alpha: 1)
       toolBar.sizeToFit()
    
            let doneButton = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.bordered, target: self, action: "donePicker")
           let spaceButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.flexibleSpace, target: nil, action: nil)
           let cancelButton = UIBarButtonItem(title: "Cancel", style: UIBarButtonItemStyle.bordered, target: self, action: "canclePicker")
    
           toolBar.setItems([cancelButton, spaceButton, doneButton], animated: false)
           toolBar.isUserInteractionEnabled = true
    
           txtPickerTextField.inputView = pickerView
           txtPickerTextField.inputAccessoryView = toolBar
          }
    
    
       func donePicker() {
        self.txtPickerTextField.text = pickerArray[selectedRow]
        txtPickerTextField.resignFirstResponder()
         }
    
          func canclePicker() {
             txtPickerTextField.resignFirstResponder()
            }
              //End  Doen Button function
             }
    
  • 完整的项目将提交给Github。Github链接:


  • 查看
    UIPickerViewDataSource
    UIPickerViewDelegate
    的文档。Swift 3中的所有方法都已更改。