如何在 swift3 中按下按钮时以编程方式执行 segue 或呈现视图

how to programmatically perform segue, or present view, when button pressed in swift3

我正在以编程方式编写一个应用程序(没有故事板)并且有登录屏幕。登录屏幕有用于登录的用户详细信息的输入框以及登录和注册按钮。

如何以编程方式与按钮交互以在按下按钮后有效地执行到新视图的转换?

我知道我会使用

作为导航按钮
    navigationItem.leftBarButtonItem = UIBarButtonItem(title: "Logout", style: .plain, target: self, action: #selector(handleLogout))

但是视图控制器中的任何按钮都有等效项吗?我敢肯定有,这可能是一个简单的问题,但我们将不胜感激。

我的按钮代码是

let registerButton: UIButton = {
        let button = UIButton(type: .system)
        button.backgroundColor = UIColor.black
        button.setTitle("Register", for: .normal)
        button.layer.cornerRadius = 5
        button.translatesAutoresizingMaskIntoConstraints = false
        return button
    }()

并作为子视图添加到登录页面

view.addSubview(registerButton)

谢谢。

您应该为按钮编写函数并将其分配给按钮

override func viewDidLoad() {
  super.viewDidLoad()
  ...
  button.addTarget(self, action: #selector(buttonAction), for: .touchUpInside)
}

func buttonAction(sender: UIButton!) {
  print("Button tapped")
}

segue 是 Interface Builder 术语。在 iOS 中,您只能以三种方式显示视图控制器:pushpresentshow。以编程方式,您不会将其称为 segue。首先,为您的按钮添加一个目标:

registerButton.addTarget(self, action: #selector(registerButtonAction), for: .touchUpInside)

创建动作方法:

@objc func registerButtonAction() {
    ...
}

如果您想 push 到视图控制器(使用导航控制器),请从操作方法内部推送到它:

@objc func registerButtonAction() {
    let destination = SomeViewController()
    navigationController?.pushViewController(destination, animated: true)
}

如果你想展示它(模态):

@objc func registerButtonAction() {
    let destination = SomeViewController()
    destination.transitioningDelegate = SomePresentationAnimationVendor() // for custom presentations
    destination.modalPresentationStyle = .custom // for custom
    present(destination, animated: true, completion: nil)
}

为您的按钮添加目标,以便在点击按钮时执行功能。

registerButton.addTarget(self, action: #selector(self.registerTapped(_:)), for: .touchUpInside) 

创建函数registerTapped

// Swift 4 requires @objc
@objc func registerTapped(_ sender: UIButton){  
    // Segue here
}

编写您的 segue 代码并将其放入 registerTapped

self.performSegue(withIdentifier: "segueName", sender: nil)

大家在一起

override func viewDidLoad() {
    super.viewDidLoad()

    registerButton.addTarget(self, action: #selector(self.registerTapped(_:)), for: .touchUpInside) 
}

@objc func registerTapped(_ sender: UIButton) {  
    self.performSegue(withIdentifier: "segueName", sender: nil)
}