【问题标题】:Detect when user taps the selection indicator in a UIPickerView?检测用户何时点击 UIPickerView 中的选择指示器?
【发布时间】: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


【解决方案1】:

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

【讨论】:

  • 谢谢,但不完全是我想要的:/
  • Stive,如果你想多一点,你同意这是唯一可能的功能。
  • 你不能用 UIPickerView 做,当用户触摸选择器中已经突出显示的值时,没有办法。
  • @Praveen-K:这也是我现在所意识到的。使用上面提到的SensitivePickerView,我可以获得类似的东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-26
相关资源
最近更新 更多