Как замаскировать вид при заполнении области? - PullRequest
1 голос
/ 17 февраля 2011

Может кто-нибудь сказать мне, как разместить полупрозрачную черную маску по всему экрану, но исключая область определенного UIView? Я хочу использовать эту маску над UITextField, которая вызывает resignFirstResponder, когда касается внешней части текстового поля.

Дерево подпредставления будет выглядеть так:

UIWindow
| -UIView
| | -UITextField
|
| -Mask

Спасибо

1 Ответ

0 голосов
/ 17 февраля 2011

Вы можете использовать:

- (void)bringSubviewToFront:(UIView *)view

и отправить UITextField на фронт после добавления вида черной маски.

ОБНОВЛЕНИЕ

Хорошо, это шаги для этого (вы можете увидеть пример Apple для UIGestureRecognizer для более подробной информации)

  1. создать представление маски (программно или с IB) и назвать его «maskView».
  2. создайте gestRecognizer и добавьте его в 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 takeSubviewToFront: textField];

  5. установите эти 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;
    

    }

Надеюсь, что в этом есть какой-то смысл

Шани

...