Я перевожу старый проект на 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
не ноль, но весь VC покрыт некоторым видом спереди, что делает мой вид сборщика невидимым:
Как создать собственную строку докладчика в Eureka 4.3?Могу ли я больше не использовать TypedRowControllerType
?