繁体   English   中英

通过UIButton单击-iOS

[英]Click through UIButton - ios

我有两个UIButtons一个在另一个之上。 第一个具有实现视觉反馈的自定义类,另一个按钮具有调用函数的onClick事件方法。

如何获得第一个按钮下的第二个按钮的onClick事件?

我需要有两个按钮,以便可以自定义触摸区域和视觉反馈的大小。

建议不要以UIButton子类化开头:)如果需要视觉反馈效果,则可以具有UIView并添加tapGesture识别器。 在检测到水龙头时,您可以

迅速

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

目标C

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

上面的按钮没有多大意义,因为如果您已经检测到敲击并发现触摸在您的需求范围之内,您为什么还要触发按钮单击,请直接调用performSelector这样您就不需要按钮了。一个视图,而您只需要一个View

只是为了澄清您可以做自己想做的事情,

如果由于某些未知原因而无法执行此操作,并且您被迫(在枪口处,我想是:P)被迫使用彼此顶部的两个按钮,则始终可以使用hitTest触摸切换到下面的按钮

迅速

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
    }
}

目标C

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

为此,您必须将下面的按钮引用传递给顶部按钮,这应该不成问题,因为无论如何您都具有顶部按钮的子类:)该代码有味道吗? 对我来说,但这会满足您的需求吗? 是的,它确实 :)

希望能帮助到你

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM