7

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

4

3 回答 3

11

也许尝试实现委托方法:

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

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

于 2009-10-02T19:22:15.127 回答
0

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

于 2009-10-02T19:15:29.073 回答
0

您可以通过以下方法在 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
    }
}
于 2014-11-12T23:33:26.843 回答