1

我试图通过仅在视图外部触摸 UIView 来关闭 UIPickerView。我看过类似这样的其他帖子,它解释了如何在键盘外按下时使用 NotificationCenter 来关闭 UIKeyboard。我想知道是否有类似的方法可以用 UIPickerView 做同样的事情。现在我在 UIActionSheet 中使用了一个完成按钮,但我喜欢让用户选择在视图外部单击的想法。另外,我知道使用“隐形按钮”的想法,它的工作方式大致相同,我只是想看看是否有更优雅的解决方案。
提前致谢。

4

1 回答 1

2

我过去通过创建自定义 UIView 然后覆盖 UIView 类的 pointInside 方法来完成此操作。这是每次 UIView 收到触摸通知时都会触发的方法。发生这种情况时,您可以确定触摸是在您的视图范围之内还是之外。

例如,您的自定义 UIView 可能如下所示:

CustomTouchUIView.h

#import 

@protocol CustomTouchUIViewDelegate

- (void) uiViewTouched:(BOOL)wasInside;

@end

@interface CustomTouchUIView : UIView 

// Properties
@property (nonatomic, assign) id delegate;

@end

CustomTouchUIView.m

#import "TOTouchUIView.h"

@implementation CustomTouchUIView

#pragma mark - Synthesize
@synthesize delegate;

#pragma mark - Touches
- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event
{
    if( point.x > 0 && point.x < self.frame.size.width && point.y > 0 && point.y < self.frame.size.height )
    {
        [delegate uiViewTouched:YES ];
        return YES;
    }

    [delegate uiViewTouched:NO ];
    return NO;
}
@end

我在这里有一个可下载的示例/在线教程

于 2011-09-20T21:29:15.747 回答