【发布时间】:2011-09-17 16:31:03
【问题描述】:
如何检测用户何时点击 UIPickerView 中的选择指示器?
如果没有这个,用户必须滚动到其他行,然后再次返回以选择选择器向上滑动时显示在选择指示器下的值。
非常感谢,
斯汀
更新:目前使用我自己的SensitivePickerView 让它工作(在这里得到了想法Responding to touchesBegan in UIPickerView instead of UIView):
#import <UIKit/UIKit.h>
@protocol SensitivePickerViewDelegate <UIPickerViewDelegate>
- (void) pickerViewWasTouched;
@end
@interface SensitivePickerView : UIPickerView
@property (nonatomic, assign) id<SensitivePickerViewDelegate> delegate;
@end
...和实现:
#import "SensitivePickerView.h"
@interface SensitivePickerView ()
- (UIView *) getNextResponderView:(NSSet *)touches withEvent:(UIEvent *)event;
@end
@implementation SensitivePickerView
@synthesize delegate;
- (void) setDelegate:(id<SensitivePickerViewDelegate>)aDelegate {
[super setDelegate:aDelegate];
delegate = aDelegate;
}
- (UIView *) hitTest:(CGPoint)point withEvent:(UIEvent *)event {
return self;
}
- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UIView *hitTestView = [self getNextResponderView:touches withEvent:event];
[hitTestView touchesBegan:touches withEvent:event];
}
- (void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
UIView *hitTestView = [self getNextResponderView:touches withEvent:event];
[hitTestView touchesMoved:touches withEvent:event];
}
- (void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
UIView *hitTestView = [self getNextResponderView:touches withEvent:event];
[hitTestView touchesEnded:touches withEvent:event];
[self.delegate pickerViewWasTouched];
}
- (void) touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event {
UIView *hitTestView = [self getNextResponderView:touches withEvent:event];
[hitTestView touchesCancelled:touches withEvent:event];
}
- (UIView *) getNextResponderView:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [touches anyObject];
CGPoint point = [touch locationInView:self];
UIView *hitTestView = [super hitTest:point withEvent:event];
return (hitTestView == self) ? nil : hitTestView;
}
@end
一点也不理想,但它可以工作:/
【问题讨论】:
-
对不起,我没有完全理解你的问题
-
@albertamg:是的,它们关系密切。问题是我在
UIDatePicker案例中找到的解决方案在UIPickerView案例中根本不起作用。 -
@Praveen-K:我想检测用户何时触摸选择器中已突出显示的值。在我的问题中包含的图像示例中:如果用户在选择器视图中触摸/点击“1 分钟”,我想知道这样我可以将“持续时间”右侧的占位符“必需”替换为“ 1 分钟”。
标签: iphone objective-c