Swift - 无法使 PickerView 库正常工作

Posted

技术标签:

【中文标题】Swift - 无法使 PickerView 库正常工作【英文标题】:Swift - Cannot make PickerView Library to Work 【发布时间】:2017-05-03 06:05:42 【问题描述】:

我正在尝试将此库集成到我的项目中

https://github.com/filipealva/PickerView

按照指示,我在界面构建器中添加了一个 UIView 并创建了与视图的@IBOutlet 连接。

这是来自我的控制器的代码

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
        
    

它显示在控制器中创建了 IBOutlet 连接,但是选择器没有显示在视图中,这里出了什么问题?

这是故事板视图的屏幕截图。

【问题讨论】:

你有没有把Identity Inspector中的类改成PickerView 是的,我确实更改了它,我注意到正在调用 datasource 和 delgate,问题是视图未显示。 你试过调试委托和数据源方法吗?是否正确执行? 是的,我通过添加打印语句来查看它是否正在运行进行调试,并且打印语句确实被执行,我不确定为什么视图被隐藏,让我上传截图故事板(视图) 附上几张storyboard配置截图。 【参考方案1】:

您将获得红色背景颜色,这意味着正在显示选取器视图(红色背景正在 configureDayPicker 方法中设置)。我认为您没有收到文本,因为您使用 index 而不是 row 来访问数组中的值。尝试改变

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

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

编辑: 另外,尝试将您的文本颜色设置为对比,以确认数据是否实际上正在加载(淡色可能会将文本混合到背景中)

【讨论】:

我运行的时候其实没有得到红色背景,我也把标签颜色改成了UIColor.black,还是不显示。 您分享的屏幕截图显示选择器视图为红色。您是否更改了高亮和非高亮的 labelColor? 尝试在包括委托和数据源方法在内的所有方法中使用print 语句记录流。打印出关键项目的值。看看那里缺少什么 你能分享你从文档大纲中查看层次结构的屏幕截图吗? 好的,等一下,我附上

以上是关于Swift - 无法使 PickerView 库正常工作的主要内容,如果未能解决你的问题,请参考以下文章

Swift字典到数组以填充pickerView

无法在 Pickerview 中设置 inputAccessoryView 工具栏

我希望禁用两个 uitextfield,因此无法对其进行编辑-SWIFT

Swift 3.0 多个选择器视图无法识别数据源变量

SWIFT 核心数据加载到pickerview

PickerView 加载表格视图数据 Swift