Обнаружение фонового касания - PullRequest
1 голос
/ 17 марта 2012

Я занят приложением, нужно нажать кнопку, но когда ты касаешься за пределами кнопки (на фоне экрана приложения), я хочу показать предупреждение.

Кто-нибудь знает, как обнаружить касание на фоне

Кнопка:

   MyButton = [UIButton buttonWithType:UIButtonTypeCustom];
    MyButton.frame = CGRectMake(0, 0, 100, 100);
    [MyButton setImage:[UIImage imageNamed:@"tap.png"] forState:nil];
    [self.view addSubview:MyButton];

    [MyButton addTarget:self action:@selector(buttonPressed) forControlEvents:UIControlEventTouchUpInside];

Ответы [ 3 ]

4 голосов
/ 17 марта 2012

Вы можете добавить распознаватель жестов в представление.

Например,

// in viewDidLoad:
UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(backgroundTapped:)];
tapRecognizer.numberOfTapsRequired = 1;
[self.view addGestureRecognizer:tapRecognizer];

- (void)backgroundTapped:(UITapGestureRecognizer*)recognizer {
    // display alert
}

Вы также можете попробовать иметь полный размер UIView за кнопкой, которая имеет распознаватель жестов.на нем:

// in viewDidLoad:
UIView *backgroundView = [[UIView alloc] initWithFrame:self.view.bounds];
backgroundView.backgroundColor = [UIColor clearColor];
backgroundView.opaque = NO;
[self.view addSubview:backgroundView];

UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(backgroundTapped:)];
tapRecognizer.numberOfTapsRequired = 1;
[backgroundView addGestureRecognizer:tapRecognizer];

- (void)backgroundTapped:(UITapGestureRecognizer*)recognizer {
    // display alert
}

Это может работать лучше, чем добавление распознавателя жестов в self.view.

0 голосов
/ 10 июля 2013

Я посмотрел на решение в первом ответе и проверил его. Это не сработало для меня. Распознаватель жестов захватил мою кнопку и другие прикосновения к элементу интерфейса (я загружаю из пера)

    A window delivers touch events to a gesture recognizer before it delivers
    them to the hit-tested view attached to the gesture recognizer. Generally,
    if a gesture recognizer analyzes the stream of touches in a multi-touch 
    sequence and does not recognize its gesture, the view receives the full
    complement of touches

Я использовал немного другое решение:

UIButton *invisibleBtn = [[UIButton alloc] initWithFrame:self.view.bounds];
invisibleBtn.titleLabel.text = @"";
invisibleBtn.backgroundColor = [UIColor clearColor]; // no tap events if this is not set, bizarre
[invisibleBtn addTarget:self action:@selector(backgroundTapped:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:invisibleBtn];
[self.view sendSubviewToBack:invisibleBtn];
0 голосов
/ 17 марта 2012

Вы можете создать собственный подкласс UIView, сделать его прозрачным, но с сенсорными обработчиками, и поместить полноразмерный экземпляр этого нового подкласса представления под свою кнопку. Затем вы можете заставить это подпредставление отправлять сообщение вашему контроллеру основного представления (посредством делегирования) всякий раз, когда оно видит событие касания. Поскольку кнопка находится в верхней части этого подпредставления, подпапка ничего не сделает, если нажать кнопку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...