Нажмите через UIButton - IOS - PullRequest
       2

Нажмите через UIButton - IOS

0 голосов
/ 18 октября 2018

У меня есть две кнопки UIB, одна поверх другой.Первый имеет собственный класс, который реализует визуальную обратную связь, а другая кнопка имеет метод события onClick, который вызывает функцию.

Как я могу получить событие onClick второй кнопки, которая находится под первой кнопкой?

Мне нужно две кнопки, чтобы я мог настроить область касания и размервизуальная обратная связь.

1 Ответ

0 голосов
/ 18 октября 2018

Подклассы UIButton не рекомендуется начинать с :) Если вам нужен эффект визуальной обратной связи, вы можете иметь UIView и добавить распознаватель tapGesture.И при обнаружении касания вы можете сделать

Swift

    let touchPoint = tapGestureRecognizer.location(in: your_view)
    if your_inner_button.frame.contains(touchPoint) {
        your_inner_button.sendActions(for: .touchUpInside)
    }

Objective-C

    CGPoint point = [self.tapGesture locationInView:self];
    if (CGRectContainsPoint(self.frame, point)) {
        [self sendActionsForControlEvents:UIControlEventTouchUpInside];
    }

Выше одного делаетне имеет особого смысла, потому что, если вы уже обнаружили касание и выяснили, что касание находится в рамке вашего требования, зачем вам даже нажимать кнопку, вызывать performSelector напрямую. Таким образом, вам не нужна кнопкарассмотрите скорее все, что вам нужно, это просто View

Просто чтобы уточнить, что можно делать то, что вы хотите,

Если по каким-то неизвестным причинам вы не можете это сделать, и вывынуждены (под дулом пистолета, я полагаю: P) использовать две кнопки друг над другом, вы всегда можете передать прикосновение к кнопке ниже, используя hitTest

Swift

class MyButton: UIButton {
    override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
        if your_inner_button.frame.contains(point) {
               return your_inner_button
        }
        return nil
    }
}

Objective-C

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
    if (CGRectContainsPoint(your_inner_button.frame, point)) {
        return your_inner_button
    }
    return nil;
}

Чтобы это работало, вам нужно будет передать ссылку на нижнюю кнопку на верхнюю кнопку, что не должно быть проблемой, потому что выв любом случае есть подкласс для верхней кнопки :) Это запах кода?Для меня да, но будет ли это служить вашим потребностям?Да, это так:)

Надеюсь, это поможет

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