简体   繁体   English

Swift-无法使PickerView库正常工作

[英]Swift - Cannot make PickerView Library to Work

I am trying to integrate this library in my project 我正在尝试将此库集成到我的项目中

https://github.com/filipealva/PickerView https://github.com/filipealva/PickerView

As instructed, I added a UIView in the interface builder and created the @IBOutlet connection to the view. 按照指示,我在界面构建器中添加了UIView并创建了与视图的@IBOutlet连接。

Here is the code from my controller 这是我控制器的代码

import UIKit
import PickerView

class SignUpStep1ViewController: UIViewController {

    @IBOutlet weak var nextBtn: UIButton?
    @IBOutlet weak var dayPicker: PickerView!

    var months = [
        "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"
    ]

    override func viewDidLoad() {
        super.viewDidLoad()
        dayPicker.delegate = self
        dayPicker.dataSource = self
        configureDayPicker()
        title = "BIRTH DATE"
    }

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        self.nextBtn?.layer.cornerRadius = 22.5
    }

    @IBAction func nextBtnClicked(sender: UIButton) {
        performSegue(withIdentifier: "SignUpStep2ViewController", sender: self)
    }

    fileprivate func configureDayPicker() {
        print("DayPicker Configuration")
        dayPicker.scrollingStyle = .default
        dayPicker.backgroundColor = UIColor.red
        dayPicker.translatesAutoresizingMaskIntoConstraints = false
        dayPicker.scrollingStyle = PickerView.ScrollingStyle(rawValue: 1)!
    }

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        let backItem = UIBarButtonItem()
        backItem.title = ""
        navigationItem.backBarButtonItem = backItem
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
}

extension SignUpStep1ViewController: PickerViewDataSource {

    func pickerViewNumberOfRows(_ pickerView: PickerView) -> Int {
        return months.count
    }

    func pickerView(_ pickerView: PickerView, titleForRow row: Int, index: Int) -> String {
        return months[index]
    }
}

extension SignUpStep1ViewController: PickerViewDelegate {

    func pickerViewHeightForRows(_ pickerView: PickerView) -> CGFloat {
        return 50.0
    }

    func pickerView(_ pickerView: PickerView, didSelectRow row: Int) {

    }

    func pickerView(_ pickerView: PickerView, didTapRow row: Int, index: Int) {

    }

    func pickerView(_ pickerView: PickerView, styleForLabel label: UILabel, highlighted: Bool) {
        if highlighted {
            label.font = UIFont.systemFont(ofSize: 25.0)
            label.textColor = view.tintColor
        } else {
            label.font = UIFont.systemFont(ofSize: 15.0)
            label.textColor = .lightGray
        }
    }
}

It shows that the IBOutlet connection is created in the controller, however the picker does not show in the view, what is going wrong here? 它显示了在控制器中创建了IBOutlet连接,但是选择器未在视图中显示,这是怎么回事?

Here is the screenshot of storyboard view. 这是情节提要视图的屏幕截图。

在此处输入图片说明 在此处输入图片说明 在此处输入图片说明

You are getting the red background color which means that the pickerview IS being shown (the red background is being set in configureDayPicker method). 您将获得红色背景色,这表示正在显示pickerview(红色背景已在configureDayPicker方法中设置)。 I think you are not getting the text because you are using index instead of row to access values from your array. 我认为您没有得到文本,因为您使用index而不是row来访问数组中的值。 Try changing 尝试改变

func pickerView(_ pickerView: PickerView, titleForRow row: Int, index: Int) -> String {
        return months[index]
}

to

func pickerView(_ pickerView: PickerView, titleForRow row: Int, index: Int) -> String {
        return months[row]
}

EDIT: Also, try setting your text color to be a contrast to confirm if the data is in fact being loaded (the tint color might be blending the text into the background) 编辑:另外,请尝试将文本颜色设置为对比度,以确认是否实际上已加载了数据(色彩可能会将文本混合到背景中)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM