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