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