gpt4 book ai didi

ios - 我的自定义 UIView 不接收触摸

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:08:32 25 4
gpt4 key购买 nike

使用 IB,我创建了一个包含几个按钮的小 subview 。我的 Controller 从 xib 文件中读取小 View 并将其作为 subview 添加到主视图中。它加载正常,我可以看到 subview 及其所有按钮。据我所知,它还连接到 Controller 中的 IBOutlets 和 IBActions。

但是,当我按下一个按钮时,没有任何反应!事实上,当我按下一个按钮时,会调用 super View 的 touchesBegan! super View 还包含一个“普通按钮”(即我的 subview 的同级按钮)并且该按钮工作正常!问题:为什么我的 subview 上的按钮不起作用?

-(void) loadMultibutt{
self.buttErase = nil; // test if the outlet connects
NSArray *arr = [[NSBundle mainBundle]
loadNibNamed:@"multibutt_ipad" owner:self options:nil];

UIView *viewButts = [arr objectAtIndex:0];
ViewWorkbench* vw = (ViewWorkbench*) self.view;
[vw addMultibuttView:viewButts];

// now, buttErase != nil.
NSSet *setTest = [self.buttErase allTargets];
NSLog(@"setTest = %@", setTest); // This works!
}

最佳答案

根据您的回复,我可以放心地得出结论,您的问题是按钮的父 View 不包含其交互区域中的按钮。您仍然可以看到它们,因为您没有剪裁 subview ,但仍然无法与它们交互。有两种选择可以解决您的问题

a)(推荐)将按钮放在适当的位置,使它们在父 View 的可见(和交互区域)内

b) 覆盖父 View 的 hitTest 选择器,以便它跟踪其 subview 中的所有触摸,包括其边界之外的触摸。为此,您必须创建 UIView 的子类并实现以下内容:

-(UIView *) hitTest:(CGPoint)point withEvent:(UIEvent *)event{
UIView* result = [super hitTest:point withEvent:event];
if (result)
return result;
for (UIView* sub in [self.subviews reverseObjectEnumerator]) {
CGPoint pt = [self convertPoint:point toView:sub];
result = [sub hitTest:pt withEvent:event];
if (result)
return result;
}
return nil;

关于ios - 我的自定义 UIView 不接收触摸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16132080/

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