如何在 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 上下滚动选择器。
我在UIPickerView
titleForRow row: Int
方法中试过这段代码
pickerView.selectRow(75, inComponent: 0, animated: true)
在这种情况下,当 pickerView 出现时,选定的值是 75。下面正是我想要的
但问题是在滚动pickerView
时我的应用程序崩溃并出现以下错误
[__NSArrayM objectAtIndex:]: index 1 beyond bounds [0 .. 0]'
任何人都可以帮助我,请提前感谢:-)
【问题讨论】:
【参考方案1】:在viewDidLoad
方法中,您的选择器是空的。如果您将 select 调用的执行延迟到数据加载完成之后,您可以执行此操作。可能一个周期就足够了。
您可以将其添加到viewDidAppear
或viewWillAppear
【讨论】:
我不想在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 3/4 移除 UIPageViewController 弹跳效果