如何将IBActions函数放入方法xcode中

问题描述

我有一些方法可以在用户点击或关闭文本字段时更改文本字段和UIView的颜色。但是,我不想在我的代码中一遍又一遍地说明IBAction,因为我的应用程序很大,有很多文本字段。我有一个单独的文件,其中保留了适用于带有文本字段的每个ViewController的所有方法,可以通过任何方式在该文件中创建一个包含IBAction的函数,因此不必在Viewcontroller中始终声明IBActions快速文件?

例如:

当用户点击一个文本字段时,该文本字段下方将变为绿色(该行由UIView组成)。

这位于我保留所有功能的单独文件中。

    static func makeBottomLineGreen(_ bottomLine:UIView,_ textField:UITextField) {
        
        func designBottomLineGreen(_ bottomLine:UIView) {
            
            UIView.animate(withDuration: 0.3,animations: {bottomLine.backgroundColor = UIColor.init(red: 48/255,green: 173/255,blue: 99/255,alpha: 1)},completion: nil)
        }
        textField.addTarget(self,action: #selector(self.designBottomLineBlack(_:)),for: .editingDidBegin)
    }

我收到一个错误消息“ #selector的参数引用了没有公开给Objective-C的静态方法'designBottomLineBlack',请添加'@objc'将该静态方法公开给Objective-C”

我已经尝试过该解决方案,但是它不起作用。

所以在我的ViewController.swift文件中,我想使用这样的方法

makeBottomLineBlack(textField1,bottomLine1)

我这样做是为了避免拖累大量的IBAction和具有冗余代码。该函数带有两个参数,即文本字段和变为绿色的底线,因此在文本字段上轻按的动作会使文本字段下方的行变为绿色。

感谢您的帮助,谢谢!

解决方法

总之,这是不可能的。我们要求在这里由ObjectiveC Cocoa回电。除了类的方法外,它什么也看不到。

当用户点击一个文本字段时,该文本字段下方将变为绿色(该行由UIView组成)。

然后,我建议您将UITextField子类化,并将功能放在那个地方-子类。这样,您可以根据需要拥有任意数量的文本字段来执行相同的功能。这就是子类的目的:为多个实例提供相同的额外功能。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...