首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用UIPicker dataSource

如何使用UIPicker dataSource
EN

Stack Overflow用户
提问于 2016-06-29 07:35:01
回答 2查看 7.7K关注 0票数 4

我使用Xcode 8和Swive2.3,但当我尝试使用UIPicker功能时,遇到了一个UIPicker无法工作的问题,这是我的代码:

代码语言:javascript
复制
import UIKit

class ViewController: UIViewController {

    let Num = ["1","2","3","4","5","6"]

    @IBOutlet weak var UIPicker: UIPickerView!
    override func viewDidLoad() {
        super.viewDidLoad()

        func numberOfRows(inComponent component: Int) -> Int {return 1}

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

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

        UIPicker.dataSource = (self as! UIPickerViewDataSource)
        UIPicker.delegate = (self as! UIPickerViewDelegate)
    }

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

当我运行代码时,Xcode警告代码:

无法将“test.ViewController”(0x1000bd8c0)类型的值转换为“UIPickerViewDataSource”(0x1ab289738)。2016-06-29 15:33:35.079300测试474:98176不能将“test.ViewController”(0x1000bd8c0)类型的值投给“UIPickerViewDataSource”(0x1ab289738)。

EN

回答 2

Stack Overflow用户

发布于 2016-06-29 07:44:50

UIPickerViewDataSourceUIPickerViewDelegate添加到类声明中:

代码语言:javascript
复制
class ViewController: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate

也不要使用self进行类型铸造

代码语言:javascript
复制
override func viewDidLoad() {
    super.viewDidLoad()

    UIPicker.dataSource = self
    UIPicker.delegate = self
}

此外,还必须将方法移出viewDidLoad函数,并对其进行一些更正:

代码语言:javascript
复制
func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {return 1}

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

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

请注意,我强烈建议您将NumUIPicker属性重命名为numpicker,这样就不会将它们与类名混在一起。

Upd:完整ViewController代码:

代码语言:javascript
复制
class ViewController: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate {

    let Num = ["1","2","3","4","5","6"]

    @IBOutlet weak var UIPicker: UIPickerView!
    override func viewDidLoad() {
        super.viewDidLoad()

        UIPicker.dataSource = self
        UIPicker.delegate = self
    }

    func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {return 1}
    func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {return Num.count}
    func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {return Num[row]}
}
票数 6
EN

Stack Overflow用户

发布于 2017-04-21 00:55:17

代码语言:javascript
复制
import Foundation
import UIKit

class MakeReferralViewController: UITableViewController,UIPickerViewDelegate, UITextFieldDelegate,UIPickerViewDataSource {

    @IBOutlet weak var makeReferralScroll: UIScrollView!

    @IBOutlet weak var userTitleUITextView: UITextField!
    var pickerData = ["Mr.", "Ms.", "Mrs.", "Miss."];
    var picker = UIPickerView()

    override func viewDidLoad() {
        super.viewDidLoad()
        picker.delegate = self
        picker.dataSource = self
        userTitleUITextView.inputView = picker

        // 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 textFieldDidBeginEditing(_ textField: UITextField) {
        makeReferralScroll.setContentOffset(CGPoint(x:0,y:250), animated: true)
    }

    func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        textField.resignFirstResponder()
        return true;
    }

    @available(iOS 10.0, *)
    func textFieldDidEndEditing(_ textField: UITextField, reason: UITextFieldDidEndEditingReason) {
        makeReferralScroll.setContentOffset(CGPoint(x:0,y:0), animated: true)
    }


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

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

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

        return pickerData[row]
    }

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

    }


}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38093163

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档