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 并将 delegate
和 datasource
更改为 self
然后它加载正常。
我只是不明白为什么将它们放在外部文件中不起作用?
你有内存管理问题。
移行:
let controller = DrinkVolumePickerController()
成为 AddDrinkViewController
的 属性 而不是 drinkVolumeControl
中的局部变量。
我有 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 并将 delegate
和 datasource
更改为 self
然后它加载正常。
我只是不明白为什么将它们放在外部文件中不起作用?
你有内存管理问题。
移行:
let controller = DrinkVolumePickerController()
成为 AddDrinkViewController
的 属性 而不是 drinkVolumeControl
中的局部变量。