PHBNonInteractableViews
重写 hitTest
以将交互传递给父视图的 UI*View 子类
isUserInteractionEnabled 与 hitTest
实际应用中有些交互要求可能相当棘手。
例如,考虑一个卡片样式的单元格。当用户点击卡片时,应用程序应当导航到某个位置。该卡片有一些子视图(如图片、标签等),不应干扰卡片整体的交互性。但卡片底部还有一个按钮,当点击这个按钮时,应当关闭卡片。
在这种情况下,将容器视图(如用于布局的堆叠视图)的 isUserInteractionEnabled
设置为否似乎是一种诱人的解决方案,但实际上这种做法是危险的。这样做可能会使得卡片的子视图默认不可交互,并阻止子视图截获本该传递给卡片的点击事件。但实际情况是,子视图不仅会默认变得不可交互,而且没有办法使其中的按钮变回可交互状态。
实际的解决方案是从容器视图派生一个子类,并重写 hitTest
方法,以便将交互传递给父类。
此库提供了重写 hitTest
的一些常见 UIView 类型的子类。
安装
Cocoapods
PHBStackLayout可通过CocoaPods获取。要安装,只需将以下行添加到Podfile中:
pod 'PHBNonInteractableViews'
要运行示例项目,首先克隆仓库,然后从示例目录中运行pod install
。
作者
phlippieb,[email protected]
许可证
PHBStackLayout采用MIT许可证。有关更多信息,请参阅LICENSE文件。