【问题标题】:UIPickerViewDelegate Xcode 8 Swift 3UIPickerViewDelegate Xcode 8 Swift 3
【发布时间】:2016-10-23 05:22:38
【问题描述】:

我的代码是:

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”

有什么办法吗?

【问题讨论】:

  • 查看UIPickerViewDataSource 和UIPickerViewDelegate 的文档。 Swift 3 中的所有方法都发生了变化。

标签: swift swift3 uipickerview


【解决方案1】:

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

}

【讨论】:

    【解决方案2】:

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

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

       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. 完整的项目已提供给 Github。 Github链接:https://github.com/enamul95/PickerView1.git

    【讨论】:

      猜你喜欢
      • 2016-12-19
      • 2015-09-15
      • 2017-02-08
      • 2017-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多