我正在尝试创建一个包含在UIViewController中的浮动按钮。 一个浮动按钮,如: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)
答案 0 :(得分:3)
这不起作用:
[self.view addSubview:closeButton];
self.view.userInteractionEnabled = NO;
closeButton.userInteractionEnabled = YES;
如果未启用self.view
,则不会启用其子视图。 closeButton
是其子视图。
但是,有一种解决方法。您为hitTest:withEvent:
覆盖self.view
以调用super并返回nil
如果它收到的视图不是按钮,并且如果 则返回按钮按钮。现在只有按钮可以触摸。
如果你不想那样做,这里有一个更简单的方法:把一个几乎不可见的视图包含在所有内容前面的按钮,userInteractionEnabled
等于true
。几乎不可见的视图的背景颜色为alpha
,小大于0 - 足以接收触摸,但不足以让用户看到它。现在触摸不会通过它,只有按钮是可点击的。 (或者让用户看到它!一个黑暗的半透明背景视图很正常 - 就像UIAlertController那样。)