【发布时间】:2020-12-10 12:56:59
【问题描述】:
我为我的选择器视图创建了一个额外的类。当我按下 BarButtonItem 和普通按钮时,会显示 PickerView。这工作正常。 我希望当我选择一个项目时,按钮的标题会改变。
我和一个代表一起尝试这个。
在我的选择器类中,我创建了一个协议:
protocol CodeDelegate {
func getCode(code: String)
}
class Picker: UIPickerView {
var codeDelegate: CodeDelegate?
func setupPickerViewForRegion(view: UIView, barButtonItem: UIBarButtonItem) {
codeDelegate = HomeViewController()
barButtonRegion = barButtonItem
viewFromController = view
createToolbar()
closeWhenTapOnScreen()
UIApplication.shared.windows.first(where: { $0.isKeyWindow })?.addSubview(blurScreenView)
view.addSubview(textField)
textField.inputView = pickerView
textField.becomeFirstResponder()
}
.
.
.
.
}
extension Picker: UIPickerViewDelegate {
.
.
.
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
let regionCode = regions[row].prefix(2)
codeDelegate!.getCode(code: String(regionCode))
}
}
一旦选择了一个值,就会执行委托。
我已经让我的其他班级符合协议。
class HomeViewController: UIViewController, CodeDelegate {
@IBOutlet weak var pickRegion: UIBarButtonItem!
func getCode(code: String) {
pickRegion.title = code
}
}
在 Delegate 方法中,我想将传递的字符串分配给按钮。但是,我在那里得到错误:
Projekt[7585:218750] 致命错误:意外发现 nil 而 隐式展开可选值:文件 Projekt/HomeViewController.swift,第 270 行
我所有的插座仍然连接,为什么会抛出这个错误?
【问题讨论】: