【发布时间】:2019-09-02 13:21:29
【问题描述】:
我使用 Interface Builder 作为 xib 创建了一个视图。我这样做是因为我想让用户可以选择将任意数量的这些视图增加到视图控制器。我创建了一个 Xib 视图(名为“TimeRangeView.xib”,创建了一个自定义类(名为“TimeRangeView.swift”)并将 xib 的类设置为此自定义类,将情节提要元素连接到 TimeRangeView.swift 的 IBOutlets,设置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 连接),但是当我尝试更改它们的一些属性时它们返回 nil :
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 没有返回 nil;它正在加载。但是当尝试访问 timeRangeView 的子视图(startDatePicker、endDatePicker、maxTimeLabel)时,它们都返回 nil。
我收到的错误是:
Fatal error: Unexpectedly found nil while implicitly unwrapping an Optional value
【问题讨论】:
-
如果视图在情节提要中,则它不在单独的 xib 中。您的带有插座的 xib 永远不会加载。
标签: ios swift interface-builder xib nib