swift - 如何在普通类中快速创建事件?

标签 swift uitextfield

我想在普通类中创建一个登录模板,但是在类中, View 无法调用事件,事件触发时不会打印“sss”

import UIKit

class ViewController: UIViewController ,UITextFieldDelegate{

    override func viewDidLoad() {
        super.viewDidLoad()
        let loginView=login(view: self.view,controller:self)
        loginView.setView();

    }
}
import UIKit
class login{
    let PassWord=UITextField()
    let view:UIView!
    let controller:ViewController
    init(view:UIView,controller:ViewController){
        self.view=view
        self.controller=controller
    }

    func setView(){
        initPassWord()
        print("1")

    }
    func initPassWord(){
        PassWord.placeholder="PassWord"
        PassWord.addTarget(self, action: #selector(login.exits(_:)), for:.allEvents)
        //PassWord.addTarget(controller, action: #selector(login.exits(_:)), for:.allEvents)
    }
    @IBAction func  exits(_ sender:UITextField){
        print("sss")
    }

最佳答案

你需要

var loginView:Login! // hold a strong reference here , start class names with capital letter 

override func viewDidLoad() {
    super.viewDidLoad()
      loginView = Login(controller:self)
      loginView.setView();
}

同时使其变弱

weak var controller:ViewController

不要导致循环引用

顺便说一句,你只需要发送 Controller ,然后你就可以访问它的 View

关于swift - 如何在普通类中快速创建事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55705205/

相关文章:

ios - 将 Swift UnsafePointer<AudioStreamBasicDescription> 转换为字典?

php - JSON 解析 --> Swift | JSON 写入中的顶级类型无效

objective-c - 为什么当在 UITextField 中点击清除按钮时,应用程序仅在 iOS 10 上挂起?

ios - 如何将触摸事件从 UITextField 转发到 UICollectionViewController/UITableViewController?

ios - 检测对已激活的 UITextField 的点击

swift - Swift 2.2 中 Alamofire 请求的返回值

ios - 两个 View Controller 之间共享的 SCNNode 消失

ios - swift 。通过字符串名称引用实例变量

iphone - 以编程方式更改 UITextField 的占位符文本颜色

iphone - UITextView 中的多行 TextField(类似于 SMS)和/或 'Done' 按钮