我的自定义UIView dos不接收触摸
使用IB,我创build了一个包含几个button的小型子视图。 我的控制器从xib文件读取小视图,并将其作为子视图添加到主视图。 它加载好,我可以看到子视图和所有的button。 据我所知,它也连接到控制器中的IBOutlets和IBActions。
但是,当我按下button什么都没有发生! 事实上,当我按下button超级视图的touchesBegan被调用! 超级视图也包含一个“普通button”(即我的子视图的兄弟),该button工作正常! 问题:为什么我的子视图上的button不起作用?
-(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! }
基于你的回复,我感到安全的是,你的问题是你的button的父视图不包含交互区域中的button。 你仍然可以看到他们,因为你没有剪裁子视图,但仍然无法与他们交互。 有两个选项来解决你的问题
a)(推荐)将button放在正确的位置,以便它们位于可见的(和父视图的交互区域)
b)覆盖父视图的hitTestselect器,以便跟踪其子视图中的所有触摸,包括其边界外的所有触摸。 为此你将不得不创build一个UIView的子类并实现以下function:
-(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;
}
- 在运行时从静态UITableView中删除行
- 加载笔尖,但没有得到一个UITableViewexception
- iOS:如何构build双语言iOS本机应用程序
- 使用NIB定义从故事板出来的UITableViewCell
- AutoLayout的问题与在NIB文件中定义并在StoryBoard中使用的自定义视图
- 无法从nib实例化UIView。 “警告:无法加载任何Objective-C类信息”
- 从nib载入自定义的UIView,包含在nib中的所有子视图都是nil?
- 在storyboard中实例化xib时,无休止的recursion调用initWithCoder
- NSInternalInconsistencyException',原因:'无法在捆绑中加载NIB:'NSBundle