谁能告诉我如何在整个屏幕上放置一个半透明的黑色面具,但是特定的UIView的区域被排除在外?我想在UITextField上使用这个掩码,当点击文本字段的外部部分时,它会调用resignFirstResponder。
子视图树就像:
的UIWindow
| -UIView
| | -UITextField
|
| -mask
谢谢,
答案 0 :(得分:0)
您可以使用:
- (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];
设置这2个功能: 在第一个中,您可以在用户触摸蒙版时设置动作
- (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;
}
希望它有所帮助
SHANI