UIPickerView:旋转时获取行值?

Posted

技术标签:

【中文标题】UIPickerView:旋转时获取行值?【英文标题】:UIPickerView: Get row value while spinning? 【发布时间】:2009-10-02 18:02:09 【问题描述】:

我想在 iPhone 用户在 UIPickerView 中旋转***时实时获取行值(不仅仅是当***停留在特定行上时)。我研究了 UIPickerView 的子类化,然后覆盖了 mouseDown 方法,但我无法让它工作。任何建议将不胜感激。

【问题讨论】:

【参考方案1】:

也许尝试实现委托方法:

- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view

您可以将其视为传递(只是传回 reusingView 参数),但每次调用它时,您都会知道当用户滚动时屏幕上出现了视图 - 然后您可以计算从该视图偏移的视图数量中心视图是。

【讨论】:

更简单:在该方法中,调用 - (NSInteger)selectedRowInComponent:(NSInteger) 组件,您将获得当前行并可以检索其值而无需计算偏移量或担心选择器的方式正在旋转。【参考方案2】:

UIPickerView 尺寸相当一致。与其继承它,也许您可​​以在选择器视图顶部覆盖您自己的UIView,您可以从中跟踪和测量拖动运动,然后将这些触摸传递到选择器视图。

【讨论】:

除非你必须对任何给定阻力发生的旋转量进行逆向工程,在你放手之后...... 我不确定这个问题与子类化方法有什么不同。至少使用UIView 方法,它的代码可以更容易地用于其他目的。 没错,任何只查看选择器视图输入的方法都会有同样的问题。【参考方案3】:

您可以通过以下方法在 UIPickerView 层次结构中找到 UIScrollView:

func findScrollView(view:UIView) -> UIScrollView? 
    if view is UIScrollView 
        return view as? UIScrollView
    
    for subview in view.subviews 
        if subview is UIView 
            let result = findScrollView(subview as UIView)
            if result != nil 
                return result
            
        
    
    return nil

实现和设置 UIScrollViewDelegate:

let scrollView = findScrollView(pickerView)
if scrollView != nil 
    scrollView!.delegate = self

并检测当前选中的项目:

func scrollViewDidScroll(scrollView: UIScrollView) 
    let offset = scrollView.contentOffset.y
    let index = Int(offset/itemHeight)
    if index >= 0 && index < items.count 
        let item = items[index]
        // do something with item
    

【讨论】:

以上是关于UIPickerView:旋转时获取行值?的主要内容,如果未能解决你的问题,请参考以下文章

触摸 UITextField 时设置 UIPickerView 的默认值

相互切换2个UIPickerview的组件

如何在 UIPickerView 上添加 UIToolbar? (iPhone/iPad)

如何在 UIPICKERVIEW (iOS) 中获取所选行的索引号

每次我旋转组件时,UIPickerView 似乎都在泄漏

当 UIPickerView 值更改时,表行在 ios 中更改