UIPickerView 没有出现

UIPickerView not appearing

我有 DrinkVolumePickerController.swift 试图保留委托和数据源逻辑以使它们远离我的 ViewController

import UIKit

class DrinkVolumePickerController: NSObject, UIPickerViewDelegate, UIPickerViewDataSource {

    var quantities: [(label: String, ml: Int)] = [("Pint", 568), ("Can", 330)]

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

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

    func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
        return quantities[row].label + " - " + String(quantities[row].ml)
    }

}

在我的 ViewController 我有

import UIKit

class AddDrinkViewController: UIViewController {

    lazy var drinkVolumeControl: UIPickerView! = {
        let view = UIPickerView()
        view.translatesAutoresizingMaskIntoConstraints = false

        let controller = DrinkVolumePickerController()
        view.delegate = controller
        view.dataSource = controller

        return view
    }()

    override func viewDidLoad() {
        super.viewDidLoad()
        view.addSubview(drinkVolumeControl)
        view.setNeedsUpdateConstraints()
    }
}

当我在模拟器中 运行 时,我没有看到选择器,但我可以在 DebugViewHeirarchy 中看到它。

如果我将所有逻辑移回 ViewController 并将 delegatedatasource 更改为 self 然后它加载正常。

我只是不明白为什么将它们放在外部文件中不起作用?

你有内存管理问题。

移行:

let controller = DrinkVolumePickerController()

成为 AddDrinkViewController 的 属性 而不是 drinkVolumeControl 中的局部变量。