UIPickerView: Get row value while spinning?

前端 未结 3 644
醉话见心
醉话见心 2020-12-11 17:13

I\'d like to get the row value in real-time as the iPhone user spins a wheel in a UIPickerView (not just when the wheel settles onto a particular row). I looked into subclas

相关标签:
3条回答
  • 2020-12-11 17:59

    Perhaps try implementing the delegate method:

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

    You could treat it as a passthrough (just passing back the reusingView parameter) but each time it was called you would know that view was coming on the screen as the user scrolled - then you could calculate how many views offset from this one the center view was.

    0 讨论(0)
  • 2020-12-11 18:16

    The UIPickerView dimensions are fairly consistent. Instead of subclassing it, perhaps you could overlay a UIView of your own on top of the picker view, from which you can track and measure dragging motions, before passing those touches down to the picker view.

    0 讨论(0)
  • 2020-12-11 18:16

    You can find UIScrollView in UIPickerView hierarchy by the following method:

    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
    }
    

    Implement and setup UIScrollViewDelegate:

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

    And detect current selected item:

    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
        }
    }
    
    0 讨论(0)
提交回复
热议问题