繁体   English   中英

检测用户何时在UIPickerView中点击选择指示器?

[英]Detect when user taps the selection indicator in a UIPickerView?

如何检测用户何时在UIPickerView中点击选择指示器?

如果没有此功能,则用户必须滚动到另一行,然后再次返回以选择在选择器向上滑动时显示在选择指示器下方的值。

非常感谢,
斯汀

在此处输入图片说明

更新:当前通过使用我自己的SensitivePickerView使它工作(在这里得到了这个想法响应UIPickerView中的touchesBegan而不是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

一点都不理想,但它有效:/

如果要显示一些默认值,请调用-[picker selectRow:row inComponent:component animation:NO]初始化选择器。
害怕,您无法知道用户是否触摸了已选择的值并不会更改它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM