1

谁能告诉我如何在整个屏幕上放置一个半透明的黑色蒙版,但排除特定 UIView 的区域?我想在 UITextField 上使用这个掩码,当点击文本字段的外部部分时,它会调用 resignFirstResponder。

子视图树将如下所示:

UIWindow
|-UIView
| |-UITextField
|
|-面膜

谢谢,

4

1 回答 1

0

您可以使用:

- (void)bringSubviewToFront:(UIView *)view

添加黑色蒙版视图后,将 UITextField 发送到前面。

更新

好的,这是执行此操作的步骤(您可以查看 UIGestureRecognizers 的苹果示例了解更多信息)

  1. 创建一个掩码视图(以编程方式或使用 IB)并将其称为“maskView”。
  2. 创建一个gestureRecognizer 并将其添加到maskView。

            UITapGestureRecognizer *recognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTapFrom:)];
            recognizer.delegate = self;
            UIImageView *maskView =  [[UIImageView alloc] init];
            [maskView addGestureRecognizer:recognizer];
    
  3. 您需要将视图控制器设置为“UIGestureRecognizerDelegate”的委托

    @interface YourViewController : UIViewController   <UIGestureRecognizerDelegate>
    
  4. 当你想屏蔽屏幕时,将 maskView 添加到你的 ViewController 中。然后将文本字段移动到掩码上方。

    [self.view addSubView:maskView]; [self.view bringSubviewToFront:textField];

  5. 设置这两个功能:在第一个功能中,如果用户触摸面具,您可以设置操作

    - (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;
    

    }

希望它有一些意义

沙尼

于 2011-02-17T09:36:40.713 回答