当我按下按钮时,我想以编程方式从FirstView切换到SecondView,我不会使用故事板。这是我的代码:
AppDelegate.swift
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
let initialViewController = FirstController()
window = UIWindow(frame: UIScreen.main.bounds)
self.window!.rootViewController = initialViewController
self.window!.makeKeyAndVisible()
return true
}
}
FirstView.swift
class FirstView: UIView {
var btnImage = UIButton(image: "Image01")
override init(frame: CGRect){
print("FirstView init")
super.init(frame: screenSize)
self.backgroundColor = UIColor.red
self.btnImage.translatesAutoresizingMaskIntoConstraints = false
addSubview(self.btnImage)
self.btnImage.alignLeftOfViewVoid(padding: 12)
self.btnImage.addTarget(self.parentViewController, action: #selector (FirstController.onClickListener(object:)), for: .touchUpInside)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
deinit{
self.removeFromSuperview()
}
}
SecondView.swift
class SecondView: UIView {
override init(frame: CGRect){
print("SecondView init")
super.init(frame: screenSize)
self.backgroundColor = UIColor.green
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
deinit{
self.removeFromSuperview()
}
}
FirstController.swift
class FirstController: UIViewController {
init(){
super.init(nibName: nil, bundle: nil)
print("MainController")
self.view = FirstView()
self.view.backgroundColor=UIColor.red
}
override var prefersStatusBarHidden: Bool {
return true
}
func onClickListener(object : UIButton!) {
print("Click to view 2")
weak var view = SecondController()
self.navigationController?.pushViewController(view!, animated: true)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
SecondController.swift
class SecondController: UIViewController {
init(){
super.init(nibName: nil, bundle: nil)
print("SecondController")
self.view = SecondView()
self.view.backgroundColor=UIColor.green
}
override var prefersStatusBarHidden: Bool {
return true
}
func onClickListener(object : UIButton!) {
print("Click to view 1")
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
我尝试了不同的解决方案,但它没有用。 非常感谢你
答案 0 :(得分:1)
您需要将FirstController
放在导航控制器中:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
let initialViewController = FirstController()
let navController = UINavigationController(rootViewController: initialViewController)
window = UIWindow(frame: UIScreen.main.bounds)
self.window!.rootViewController = navController
self.window!.makeKeyAndVisible()
return true
}
现在,您可以从SecondController
推送FirstController
。
答案 1 :(得分:0)
谢谢!完美运作:
新AppDelegate.swift
...
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
let initialViewController = FirstController()
let navController = UINavigationController(rootViewController: initialViewController)
window = UIWindow(frame: UIScreen.main.bounds)
self.window?.rootViewController = navController
self.window?.makeKeyAndVisible()
return true
}
...
如果您只想在第一页上隐藏导航栏:
添加到FirstController:
override func viewWillAppear(_ animated: Bool) {
self.navigationController?.setNavigationBarHidden(true, animated: animated)
super.viewWillAppear(animated)
}
override func viewWillDisappear(_ animated: Bool) {
self.navigationController?.setNavigationBarHidden(false, animated: animated)
super.viewWillDisappear(animated)
}