ios - 使应用程序中的每个按钮都符合子类
问题描述
我正在尝试在可点击对象的任何点击上创建脉冲动画UITextField
(因此,UIButton
等)我可以手动将动画添加到每个对象,但是由于我将其应用于大型代码库,这将添加大量代码。所以我试图找到一种方法来将函数普遍应用于应用程序中这些类型的所有对象。
到目前为止,我已经创建了UIView
以下扩展:
func addPulseOnTouch() {
let gesture = UITapGestureRecognizer(target: self, action: #selector(self.addPulseSelector))
gesture.cancelsTouchesInView = false
self.addGestureRecognizer(gesture)
}
@objc func addPulseSelector(sender : UITapGestureRecognizer) {
pulseAnimation(gesture: sender) // creates pulse animation
}
它创建了一个手势识别器,它在大多数情况下都有效(除了 UITextFields,由于某种原因它仍然会阻止选择)。但是,我在遍历UIViewController
. 目前我正在使用这个扩展:
func addPulseToSubviews() {
let allowedTypes = [UIButton.self, UIBarButtonItem.self, UISegmentedControl.self, UITableViewCell.self, UIControl.self]
for view in self.subviewsRecursive() { // retrieves all subviews for the main view
let viewType = type(of: view)
for type in allowedTypes {
if type == viewType { view.addPulseOnTouch() }
}
}
}
但它不识别UITableView
s 内的项目。所以我的问题是是否有办法
1)以一种无需单独设置即可访问每个项目的方式应用当前扩展buttonName.addPulseOnTouch()
或者
2)创建一个所有按钮(等)都可以符合的子类,而无需为应用程序中的每个对象手动设置子类
解决方案
推荐阅读
- mongodb - 50gb 数据集索引上的 MongoDB 文本搜索不适用于确切的短语
- r - 如何将'checkresiduals()函数的输出图发送到pdf文件
- javascript - 出现错误:GET https://www.gstatic.com/charts/elements/loader.js net::ERR_ABORTED 404
- php - 移动目录和删除目录文件
- c++ - 在 C++ 中,log2() 和 log2l() 返回不同的值
- azure - 有没有办法在 Cosmos DB Java V4 API 中读取数据库链接?
- sql - Oracle 查询按 3 个值分组
- ocaml - 如何在 ocaml lambda 中创建自由变量检查功能
- android - 有没有办法访问安卓设备的电源配置文件?
- git - Gitlab:什么是在合并结果管道之后运行的合并训练管道