将数据传回 UIPickerView

Pass data back to UIPickerView

我正在创建计时器应用程序,我希望用户能够编辑现有计时器。例如,当用户单击特定计时器时,他可以编辑小时、分钟和秒,我最初是从 UIPickerView 获得的。

我正在使用此代码获取新计时器的小时、分钟和秒数:

    var hour: Int = 0
    var minutes: Int = 0
    var seconds: Int = 0
    var name: String = ""

    var totalSeconds: Int {
        return hour * 3600 + minutes  * 60 + seconds
    }

}
     extension TimerSelectViewController: UIPickerViewDelegate, UIPickerViewDataSource {

         func numberOfComponents(in pickerView: UIPickerView) -> Int {
             return 3
         }

         func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
             switch component {
             case 0:
                 return 25
             case 1, 2:
                 return 60
             default:
                 return 0
             }
         }

         func pickerView(_ pickerView: UIPickerView, widthForComponent component: Int) -> CGFloat {
            return pickerView.frame.size.width/4
         }

         func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
             switch component {
             case 0:
                 return "\(row) hr"
             case 1:
                 return "\(row) min"
             case 2:
                 return "\(row) sec"
             default:
                 return ""
             }
         }
         func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
             switch component {
             case 0:
                 hour = row
             case 1:
                 minutes = row
             case 2:
                 seconds = row
             default:
                 break;
             }
         }

但是当用户想要编辑计时器而不是创建新计时器时,我如何将数据传回 UIPickerView?

UIPickerView 有预选行的方法:https://developer.apple.com/documentation/uikit/uipickerview/1614382-selectrow

例如:

let picker = UIPickerView()
// 14:00:00 or 2:00:00 PM, add more select commands as needed
picker.selectRow(14, inComponent: 0, animated: false)