gpt4 book ai didi

ios - userInteractionEnabled = NO;除了一个子按钮

转载 作者:行者123 更新时间:2023-11-28 19:34:31 26 4
gpt4 key购买 nike

我正在尝试创建一个包裹在 UIViewController 中的 float 按钮。一个 float 按钮,如:https://material.google.com/components/buttons-floating-action-button.html#

但是我怎样才能让按钮响应触摸呢?

- (void)viewDidLoad {

UIButton *closeButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[closeButton addTarget:self
action:@selector(aMethod:)
forControlEvents:UIControlEventTouchDown];
[closeButton setTitle:@"Back"
forState:UIControlStateNormal];
closeButton.frame = CGRectMake(30.0, 30.0, 100.0, 30.0);
[self.view addSubview:closeButton];

self.view.userInteractionEnabled = NO;
closeButton.userInteractionEnabled = YES;
}

更新:我添加了一个名为 MyView 的 UIView 子类并添加了:

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
UIView *hitTestView = [super hitTest:point withEvent:event];
if (hitTestView == self) {
hitTestView = nil;
}

NSLog(@"%@", hitTestView);

return hitTestView;
}

并在 ViewController ViewDidLoad 中将其添加为第一行:

self.view = [[MyView alloc] init];

NSLog 始终显示 (null)

最佳答案

这是行不通的:

[self.view addSubview:closeButton];
self.view.userInteractionEnabled = NO;
closeButton.userInteractionEnabled = YES;

如果 self.view 未启用,则其 subview 也未启用。 closeButton 是它的 subview 。

但是,有一个解决方法。您为 self.view 覆盖 hitTest:withEvent: 以调用 super 并返回 nil 如果它收到的 View 不是按钮,并且如果 按钮,则返回该按钮。现在只有按钮是可触摸的。

如果您不想这样做,这里有一个更简单的方法:在所有内容的前面放置一个包含按钮的几乎不可见的 View ,userInteractionEnabled 等于 true。几乎不可见的 View 有一个背景颜色,其 alpha 比 0 大 一点 — 刚好足以接收触摸,但不足以让用户看到它。现在触摸不会穿过它,只有按钮是可点击的。 (或者让用户看到它!深色半透明背景 View 是很正常的——就像 UIAlertController 所做的那样。)

关于ios - userInteractionEnabled = NO;除了一个子按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40345068/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com