【发布时间】:2009-10-02 18:02:09
【问题描述】:
我想在 iPhone 用户在 UIPickerView 中旋转轮子时实时获取行值(不仅仅是当轮子停留在特定行上时)。我研究了 UIPickerView 的子类化,然后覆盖了 mouseDown 方法,但我无法让它工作。任何建议将不胜感激。
【问题讨论】:
标签: iphone uipickerview
我想在 iPhone 用户在 UIPickerView 中旋转轮子时实时获取行值(不仅仅是当轮子停留在特定行上时)。我研究了 UIPickerView 的子类化,然后覆盖了 mouseDown 方法,但我无法让它工作。任何建议将不胜感激。
【问题讨论】:
标签: iphone uipickerview
也许尝试实现委托方法:
- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view
您可以将其视为传递(只是传回 reusingView 参数),但每次调用它时,您都会知道当用户滚动时屏幕上出现了视图 - 然后您可以计算从该视图偏移的视图数量中心视图是。
【讨论】:
UIPickerView 尺寸相当一致。与其继承它,也许您可以在选择器视图顶部覆盖您自己的UIView,您可以从中跟踪和测量拖动运动,然后将这些触摸传递到选择器视图。
【讨论】:
UIView 方法,它的代码可以更容易地用于其他目的。
您可以通过以下方法在 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
}
}
【讨论】: