谁能告诉我如何在整个屏幕上放置一个半透明的黑色蒙版,但排除特定 UIView 的区域?我想在 UITextField 上使用这个掩码,当点击文本字段的外部部分时,它会调用 resignFirstResponder。
子视图树将如下所示:
UIWindow
|-UIView
| |-UITextField
|
|-面膜
谢谢,
您可以使用:
- (void)bringSubviewToFront:(UIView *)view
添加黑色蒙版视图后,将 UITextField 发送到前面。
更新
好的,这是执行此操作的步骤(您可以查看 UIGestureRecognizers 的苹果示例了解更多信息)
创建一个gestureRecognizer 并将其添加到maskView。
UITapGestureRecognizer *recognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTapFrom:)];
recognizer.delegate = self;
UIImageView *maskView = [[UIImageView alloc] init];
[maskView addGestureRecognizer:recognizer];
您需要将视图控制器设置为“UIGestureRecognizerDelegate”的委托
@interface YourViewController : UIViewController <UIGestureRecognizerDelegate>
当你想屏蔽屏幕时,将 maskView 添加到你的 ViewController 中。然后将文本字段移动到掩码上方。
[self.view addSubView:maskView]; [self.view bringSubviewToFront:textField];
设置这两个功能:在第一个功能中,如果用户触摸面具,您可以设置操作
- (void)handleTapFrom:(UITapGestureRecognizer *)recognizer {
//resign the first responder when the user taps the mask
//you can remove the mask here if you want to
在第二个中,您告诉应用不要接收来自 textField 的触摸
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
// Disallow recognition of tap gestures in the segmented control.
if ((touch.view == textField)) {//checks if the touch is on the textField
return NO;
}
return YES;
}
希望它有一些意义
沙尼