【发布时间】:2018-12-08 11:18:16
【问题描述】:
我正在将一个旧项目迁移到 Swift 4,所以我自然也更新到了 Eureka 4.3。
在旧项目中,有一个名为LatitudeSelectorRow 的自定义行显示LatitudeSelectorController。
LatitudeSelectorRow 以前是这样的:
final class LatitudeSelectorRow: SelectorRow<PushSelectorCell<CLLocationDegrees>, LatitudeSelectorController> {
required init(tag: String?, _ initializer: ((LatitudeSelectorRow) -> ())) {
super.init(tag: tag)
initializer(self)
// Focus on here!!
presentationMode = PresentationMode.show(controllerProvider: ControllerProvider.storyBoard(storyboardId: "LatitudeSelector", storyboardName: "Main", bundle: nil), completionCallback: {
_ in
})
displayValueFor = {
...
}
}
required convenience init(tag: String?) {
self.init(tag: tag)
}
}
而LatitudeSelectorController 曾经看起来像这样:
class LatitudeSelectorController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource, TypedRowControllerType {
/// A closure to be called when the controller disappears.
public var onDismissCallback: ((UIViewController) -> ())?
@IBOutlet var latitudePicker: UIPickerView!
var row: RowOf<CLLocationDegrees>!
var completionCallback: ((UIViewController) -> ())?
...
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
let degrees = latitudePicker.selectedRow(inComponent: 0)
let minutes = latitudePicker.selectedRow(inComponent: 1)
let seconds = latitudePicker.selectedRow(inComponent: 2)
let negative = latitudePicker.selectedRow(inComponent: 3) == 1
self.row?.value = (Double(degrees) + Double(minutes) / 60.0 + Double(seconds) / 3600.0) * (negative ? -1 : 1)
}
在 Eureka 4.3 中,这停止了工作。它给了我一个错误,说 LatitudeSelectorController 不能转换为 SelectorViewController。
我试图通过更改 PresentationMode 来解决这个问题:
presentationMode = PresentationMode.segueName(segueName: "selectLatitude", onDismiss: nil)
VC 显示成功,但我注意到row 属性为nil。这意味着无论我在 VC 中选择什么,该行的值都不会改变。
我还尝试让LatitudeSelectorController 继承自SelectorRowController:
class LatitudeSelectorController: SelectorViewController<SelectorRow<PushSelectorCell<Double>>>
并恢复使用PresentationMode.show。
这一次,row 不是 nil,而是整个 VC 都被前面的某个视图覆盖,使我的选择器视图不可见:
如何在 Eureka 4.3 中创建自定义演示者行?我可以不用TypedRowControllerType了吗?
【问题讨论】:
标签: ios swift eureka-forms