UIPickerView:旋转时获取行值?

时间:2009-10-02 18:02:10

标签: iphone uipickerview

我想实时获取行值,因为iPhone用户在UIPickerView中旋转一个轮子(不仅仅是当轮子安装到特定行时)。我查看了子类化UIPickerView然后重写了mouseDown方法,但我无法使其工作。任何建议都将非常感谢。

3 个答案:

答案 0 :(得分:11)

也许尝试实现委托方法:

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

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

答案 1 :(得分:0)

UIPickerView维度相当一致。可能您可以在选择器视图的顶部覆盖自己的UIView,而不是对其进行子类化,从而可以跟踪和测量拖动运动,然后将这些触摸传递到选择器视图。

答案 2 :(得分: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
    }
}