首页 > 解决方案 > 使应用程序中的每个按钮都符合子类

问题描述

我正在尝试在可点击对象的任何点击上创建脉冲动画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() }
            }
        }
    }

但它不识别UITableViews 内的项目。所以我的问题是是否有办法

1)以一种无需单独设置即可访问每个项目的方式应用当前扩展buttonName.addPulseOnTouch()

或者

2)创建一个所有按钮(等)都可以符合的子类,而无需为应用程序中的每个对象手动设置子类

标签: iosswift

解决方案


推荐阅读