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

时间:2018-04-11 23:04:34

标签: ios xcode 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)

感谢。

3 个答案:

答案 0 :(得分:1)

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)
}

答案 1 :(得分:0)

你应该为你的按钮编写功能并将其分配给按钮

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

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

答案 2 :(得分:0)

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

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)
}