Программная настройка WKPickerItem не пойдет выше определенного значения?
Не могу понять это, с помощью кода ниже я позволил пользователю установить значение на WKPickerItem
, храните его в UserDefaults
затем загрузите его в следующий раз InterfaceController
загружен и попытка установить PickerItem с сохраненным значением. Проблема в том, что если я установлю значение 1 - 7, затем вернусь назад, затем нажмите, чтобы снова показать этот контроллер интерфейса, и я увижу правильное значение в InterfacePicker. Однако, если я установлю его на 8, 9 или 10, InterfacePicker будет идти только до 7? правильные индексы и элементы выводятся на консоль, это просто фактическое значение в интерфейсе неверно?
import WatchKit
import Foundation
class SettingsInterfaceController: WKInterfaceController {
let defaults = UserDefaults.standard
var shiftTimerHapticIntervalOptions = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
var userShiftTimerHapticInterval = 10
@IBOutlet var shiftTimerHapticIntervalPicker: WKInterfacePicker!
@IBAction func shiftTimerHapticIntervalDidChange(_ value: Int) {
WKInterfaceDevice.current().play(.click)
userShiftTimerHapticInterval = shiftTimerHapticIntervalOptions[value]
}
override func awake(withContext context: Any?) {
super.awake(withContext: context)
let shiftTimerHapticIntervalPickerItems: [WKPickerItem] = shiftTimerHapticIntervalOptions.map {
let pickerItem = WKPickerItem()
pickerItem.caption = $0.description
pickerItem.title = $0.description
return pickerItem
}
shiftTimerHapticIntervalPicker.setItems(shiftTimerHapticIntervalPickerItems)
}
override func willActivate() {
// This method is called when watch view controller is about to be visible to user
super.willActivate()
// Look up user settings
if let userShiftTimerHapticIntervalUnwrapped = defaults.value(forKey: userShiftTimerHapticIntervalKey) as? Int {
userShiftTimerHapticInterval = userShiftTimerHapticIntervalUnwrapped
if let indexOfUserShiftTimerHapticInterval = shiftTimerHapticIntervalOptions.index(of: userShiftTimerHapticInterval) { shiftTimerHapticIntervalPicker.setSelectedItemIndex(indexOfUserShiftTimerHapticInterval)
}
}
}
override func didDeactivate() {
// This method is called when watch view controller is no longer visible
super.didDeactivate()
defaults.set(userShiftTimerHapticInterval, forKey: userShiftTimerHapticIntervalKey)
}
}
1 ответ
Попробуйте позвонить
shiftTimerHapticIntervalPicker.setSelectedItemIndex(indexOfUserShiftTimerHapticInterval)
в интерфейсном контроллере didAppear()
функция вместо в willActivate()
функция. Я видел некоторые из тех же вещей, но более случайные, когда пытался установить индекс сборщика в willActivate()
функция.