swift - 以编程方式移动到下一个 View Controller

标签 swift uibutton

我想知道如何使用代码/编程方式创建一个在单击登录按钮后移动到登录页面的功能。

这是我的代码:

final class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let loginButton = UIButton(frame: CGRectMake(20, 640, 175, 75))
        loginButton.setTitle("Login", forState: UIControlState.Normal)
        loginButton.backgroundColor = UIColor.init(red: 255, green: 215, blue: 0, alpha: 0.8)
        loginButton.setTitleColor(UIColor.blackColor(), forState: UIControlState.Normal)
        loginButton.titleLabel!.font = UIFont(name: "StarJediSpecialEdition", size: 30)
        loginButton.addTarget(self,
                              action: #selector(ViewController.tapActionButton),
                              forControlEvents: UIControlEvents.TouchUpInside)
        self.view.addSubview(loginButton)
    }

    func tapActionButton(sender:UIButton!) {
        print("Button is working")
    }
}

最佳答案

有多种方法可以创建登录页面 UIViewController:

  1. 例如,从 xib,您可以从此类继承您的 Controller :
class XibLoadedVC: UIViewController {
        required init?(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") }
        required init() {
            print("init \(type(of: self))")
            let bundle = Bundle(for: type(of: self))
            super.init(nibName: String(describing: type(of: self)), bundle: bundle)
        }
    }

或者只是

let controller = LoginPageViewController(nibName: "LoginPageViewController", bundle: nil)
  1. 来自 Storyboard:
let storyboard = UIStoryboard(name: "MyStoryboardName", bundle: nil)
let loginPage = storyboard.instantiateViewControllerWithIdentifier("LoginPageViewController") as! LoginPageViewController

有多种方法可以显示 Controller ,具体取决于您创建它的方式:

  1. 您可以向 Controller 展示:
func tapActionButton(sender: UIButton!) {
    let loginPage = LoginPageViewController()
    self.present(loginPage, animated: true)
}
  1. 使用 navigationController 以编程方式推送:
navigationController?.pushViewController(loginPage, animated: true)

需要 UINavigationController 才能工作。由于您无法确定,您的 Controller 是否在导航 Controller 堆栈中,有可选的 navigationController? 不会破坏应用程序:)

  1. Storyboard和 Segues:

在您的 ViewController 和 LoginPageViewController 之间创建 segue。 给你的 segue 一个标识符和展示风格。对于这种情况,它将是 Show Example

现在在你的 ViewController 重写下面的方法

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
   if segue.identifier == "YourSegueIdentifier"
       let loginPage = segue.destinationViewController as! LoginPageViewController
   }
}

在 loginButton 点击​​ Action 时:

func tapActionButton(sender: UIButton!) {
    performSegueWithIdentifier("YourSegueIdentifier", sender: nil)
}

大功告成。

附言 此外,还有现代 SwiftUI 方法可以完成所有这些操作,您可以查看教程和官方文档。

关于swift - 以编程方式移动到下一个 View Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39339774/

相关文章:

Swift 4 - 为多个按钮创建通用功能

iphone - 如何使用 UISwipeGestureRecognizer 将 'tap' 传递给位于 UIView 下方的 UIButton?

ios - 使用*作为Realm中 'LIKE'的常规字符过滤对象

swift - XCTest UITests 在应用启动时失败,并显示过期 token 错误

ios - 在哪些队列中执行 Collection View 的委托(delegate)/数据源方法?

ios - 屏幕旋转后 UIImageView 和 UIButton 图像困惑

ios - scrollView ContainerView 内的 Swift 3.0 UiTableView 未调用 DidSelectRow(Twitter 配置文件)

ios - NSLayoutConstraint 并分配一个 int 变量

ios - UIModalTransitionStylePartialCurl 导致 UIButton 文本动画

ios - UIImage 未在按钮 IBAction 上的 setImage 上更新