我如何使通过-addSublayer添加的UI元素:响应触摸事件?

以下是我用来通过-addSublayer将UIButton添加到图层的-addSublayer

 CAGradientLayer * tile = [[tile alloc] init]; UIButton *XImageButton = [[UIButton alloc]init]; XImageButton.frame= CGRectMake(kXButtonlocX, kXButtonlocY, kXButtonHeight,kXButtonWidth ); [XImageButton setTitle:@"xbutton" forState:UIControlStateNormal]; [XImageButton addTarget:nil action:@selector(XbuttonTouchEvent) forControlEvents:UIControlEventTouchUpInside]; [tile addSublayer:XImageButton.layer]; 

XImageButton没有响应触摸事件。 我怎样才能解决这个问题呢?

你不能。 您必须将该button添加为子视图。

UIKit触摸事件转发是UIResponder的一个function,CALayers不会从UIResponderinheritance,所以除非你喜欢从第一个原则来实现触摸处理,否则这是不可行的。

要将您的渐变图层转换为视图,有两个选项:

1)创build一个新的UIView子类并重写它的+(Class)layerClass方法来返回CAGradientLayer。

2)创build一个常规的UIView,并添加你的CAGradientLayer作为子层,然后添加你的button作为视图的子视图,而不是直接将其添加到CAGradientLayer。