Я создал представление, используя Interface Builder в качестве xib. Я сделал это, так как хочу дать пользователю возможность увеличивать любое количество этих представлений в контроллере представлений. Я создал представление Xib (с именем «TimeRangeView.xib», создал пользовательский класс (с именем «TimeRangeView.swift») и установил класс Xib в этот пользовательский класс, подключил элементы раскадровки к IBOutlets TimeRangeView.swift, установил Владелец файла xib в TimeRangeView.swift и добавил представление с его классом, установленным в мой TimeRangeView.swift в контроллере представления.
TimeRangeView.swift:
import UIKit
class TimeRangeView: UIView {
@IBOutlet var startTimeLabel: UILabel!
@IBOutlet var startDatePicker: UITextField!
@IBOutlet var endTime: UILabel!
@IBOutlet var endDatePicker: UITextField!
@IBOutlet var addButton: UIButton!
@IBOutlet var maxTimeLabel: UILabel!
@IBAction func addButtonPressed(_ sender: UIButton) {
}
}
Раскадровка UIViewController, в которой я использую это, имеет представление Interface Builder в качестве подпредставления; класс этого представления назначен как TimeRangeView.swift. Этот вид связан с контроллером вида как IBOutlet:
@IBOutlet var timeRangeView: TimeRangeView!
В методе viewDidLoad () контроллера представления я хочу изменить некоторые подпредставления TimeRangeView (которые, как мы уже говорили, связаны как IBOutlets), но они возвращают ноль, когда я пытаюсь изменить некоторые из их свойств :
override func viewDidLoad() {
super.viewDidLoad()
timeRangeView.maxTimeLabel.text = "Max duration: \(timeString ?? "n/a")"
//Change the text fields' input views
let startTimeDatePickerToolBar = UIToolbar().ToolbarPicker(mySelect: #selector(dismissPicker))
let endTimeDatePickerToolBar = UIToolbar().ToolbarPicker(mySelect: #selector(dismissPicker))
startTimeDatePicker.setDate(Date(timeIntervalSince1970: NSDate().timeIntervalSince1970 + 60), animated: false)
endTimeDatePicker.setDate(Date(timeIntervalSince1970: NSDate().timeIntervalSince1970 + 120), animated: false)
timeRangeView.startDatePicker.inputView = startTimeDatePicker
timeRangeView.startDatePicker.inputAccessoryView = startTimeDatePickerToolBar
timeRangeView.startDatePicker.delegate = self
timeRangeView.endDatePicker.inputView = endTimeDatePicker
timeRangeView.endDatePicker.inputAccessoryView = endTimeDatePickerToolBar
timeRangeView.endDatePicker.delegate = self
}
timeRangeView не возвращает ноль; это загрузка. Но при попытке доступа к подпредставлениям timeRangeView (startDatePicker, endDatePicker, maxTimeLabel) все они возвращают ноль.
Я получаю ошибку:
Fatal error: Unexpectedly found nil while implicitly unwrapping an Optional value