UIPickerViewDelegate Xcode 8 Swift 3

3

我的代码是:

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”

有什么解决方案吗?


3
请查看 UIPickerViewDataSourceUIPickerViewDelegate 的文档。所有方法在 Swift 3 中都已更改。 - rmaddy
2个回答

12

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) {

}

1

在Swift 3中使用完成按钮的PickerView完整示例

  1. First Of all, Create a single view application in swift 3. Drag a text field & connect to view controller.
  2. Implement in two PickerView protocol named UIPickerViewDelegate,UIPickerViewDataSource
  3. UIPickerViewDelegate & UIPickerViewDataSource need to implement methods like numberOfComponents,numberOfRowsInComponent,titleForRow
  4. Picker View Look Like Below Image enter image description here
  5. Full source are given bellow

     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
             }
    
  6. Complete Project Is given to Github. Github Link: https://github.com/enamul95/PickerView1.git


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接