如何在 iOS Swift 3 中滚动到 UIPickerView 中的特定行

Posted

技术标签:

【中文标题】如何在 iOS Swift 3 中滚动到 UIPickerView 中的特定行【英文标题】:How to Scroll to Specific Row in UIPickerView In iOS Swift 3 【发布时间】:2017-08-31 10:02:01 【问题描述】:

我有一个UIPickerView,其值为 0...250。 UIPickerView 中有 2 个组件。在第一个组件中,我正在显示这些值。但我想检测UIPickerView 的滚动方法。因为当 pickerView 出现时,我想显示的值为 75。表示 pickerView 滚动到第 75 行。用户可以使用值 0...250 上下滚动选择器。 我在UIPickerViewtitleForRow row: Int方法中试过这段代码

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

在这种情况下,当 pickerView 出现时,选定的值是 75。下面正是我想要的

但问题是在滚动pickerView 时我的应用程序崩溃并出现以下错误

[__NSArrayM objectAtIndex:]: index 1 beyond bounds [0 .. 0]'

任何人都可以帮助我,请提前感谢:-)

【问题讨论】:

【参考方案1】:

viewDidLoad 方法中,您的选择器是空的。如果您将 select 调用的执行延迟到数据加载完成之后,您可以执行此操作。可能一个周期就足够了。

您可以将其添加到viewDidAppearviewWillAppear

【讨论】:

我不想在 optional func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int,inComponent component: Int) 上执行此操作,我想在出现 pickerView 时显示 75 好吧,您可以使用pickerView.selectRow(75, inComponent: 0, animated: true),但可能是您在viewdidLoad() 中的线路,请尝试将您的select 移动到viewDidAppear 您能否在此处提供更多代码。Bcz 似乎数据源(您的数组)不正确。【参考方案2】:

这是因为您在 pickerView 初始化 cell 之前滚动到 index 75。 UIPickerView 仅先初始化可见单元格,然后在滚动时初始化其余单元格。

viewDidAppear 中执行此操作

override func viewDidAppear(_ animated: Bool) 
    pickerView.selectRow(75, inComponent: 0, animated: true)

【讨论】:

以上是关于如何在 iOS Swift 3 中滚动到 UIPickerView 中的特定行的主要内容,如果未能解决你的问题,请参考以下文章

如何在 UIScrollView iOS/Swift 中的控件页面之间水平滚动

如何创建固定导航栏 iOS Swift

如何在iOS swift中水平滚动图像

如何在 iOS 中为 Swift 3/4 移除 UIPageViewController 弹跳效果

如何在 iOS Swift4 中滚动时增加/减少 UILabel 字体大小以及宽度和高度

iOS当我滚动到底部Swift 4时如何更新表格视图数据