显示带有选定行的 UIPickerView

Posted

技术标签:

【中文标题】显示带有选定行的 UIPickerView【英文标题】:Showing UIPickerView with selected row 【发布时间】:2016-02-29 19:47:30 【问题描述】:

我试图弄清楚在上次选择UIPickerView 后如何显示选定的行。

当我再次打开我的 PickerView 时,我希望我的 UIPickerView 设置我上次选择的选定行。

在 Swift 中有什么方法吗?

【问题讨论】:

【参考方案1】:

您可以将最后选定的行保存在 NSUserDefaults 中,将视图控制器的 viewDidLoad 中的值和选取器的选定行检索到值数组中选定值的索引。

class Pick: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource 

var picker = UIPickerView()
var selected: String 
    return NSUserDefaults.standardUserDefaults().stringForKey("selected") ?? ""

var data = ["One", "Two", "Three"]

override func viewDidLoad() 
    super.viewDidLoad()
    picker.delegate = self
    picker.dataSource = self
    if let row = data.indexOf(selected) 
        picker.selectRow(row, inComponent: 0, animated: false)
    


func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int 
    return data.count


func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int 
    return 1


func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? 
    return data[row]


func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) 
    NSUserDefaults.standardUserDefaults().setObject(data[row], forKey: "selected")



【讨论】:

感谢您的帮助!!我现在知道了。【参考方案2】:

UIPickerView api 允许您在代码中的任何组件中选择行:

func selectRow(_ row: Int,
   inComponent component: Int,
      animated animated: Bool)

因此,如果您为选择器的组件存储了选定的索引,只需在再次显示选择器之前为每个组件调用此方法。

【讨论】:

您需要将此代码放在您设置选择器视图的位置。是你的问题吗?您是否将选定的索引保存在某处?【参考方案3】:

如果这是为了存储某种设置,您可能需要考虑使用像 NSUserDefaults 这样的持久存储。更改选择器时,保存nsuserdefaults值。然后在您的 viewDidLoad 方法中,您可以将选择器视图设置为您之前保存的行。

例如,当您检测到选择器视图 pickerView 已更改以将行存储在键 pickerViewValue 中时,请使用这些行。把这个放在pickerView的didSelectRow中。

let defaults = NSUserDefaults.standardUserDefaults()
defaults.setObject(row, forKey: "pickerViewRow")

然后当你加载视图时,使用它来设置选择器到保存的行:

let defaults = NSUserDefaults.standardUserDefaults()
if let pickerViewRow = defaults.stringForKey("pickerViewRow")

    pickerView.selectRow(pickerViewRow, inComponent: 0, animated: true)

【讨论】:

任何示例代码帮助表示赞赏。谢谢 感谢您的帮助! 在 Swift 3 中:让 defaults = UserDefaults.standard defaults.set(row, forKey: "pickerViewRow")【参考方案4】:

对于 Swift 3

 func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) 
    if(pickerView.tag==0)
        //set some global variable
    
 

【讨论】:

以上是关于显示带有选定行的 UIPickerView的主要内容,如果未能解决你的问题,请参考以下文章

QML Tableview显示选定行的值

删除选定行的对象

获取子表单中选定行的ID

如何在分段控制器内的 tableView 中保存选定行的状态?

从Angular 2+中的剑道网格中获取选定行的列表

如何更改 ListView/GridView 中选定行的文本颜色? (使用 Expression Dark 主题)