Swift Uikit 以编程方式导航到开始视图
Swift Uikit navigate to starting view programmatically
我有一个 Ios
应用构建 Swift
UIKit
,
所有视图都嵌入在 soryboard 的底部导航中。
我想以编程方式从按钮单击的另一个视图导航到主视图(起始视图),因此不要将其显示在当前视图上方或将其推到顶部,这样就不会出现“后退”按钮,
就像用户第一次加载应用程序一样,
我怎样才能完成这样的事情?
如果我理解得很好,请将此代码放入您的点击操作函数中:
let controller = YourStartController()
controller.modalPresentationStyle = .fullScreen
present(controller, animated: true, completion: nil)
如果要更换导航控制器动画:
let controller = YourStartController()
let transition = CATransition()
transition.duration = 0.3
transition.type = CATransitionType.push
transition.subtype = CATransitionSubtype.fromLeft
guard let window = view.window else { return }
window.layer.add(transition, forKey: kCATransition)
present(YourStartController, animated: false, completion: nil) // important, set animated to false
编辑
这是一个转换示例:
我的第一个控制器:
class FirstController: UIViewController {
let goToSecondButton: UIButton = {
let b = UIButton(type: .system)
b.layer.cornerRadius = 10
b.clipsToBounds = true
b.backgroundColor = .red
b.setTitleColor(.white, for: .normal)
b.setTitle("Go to second", for: .normal)
b.titleLabel?.font = .systemFont(ofSize: 16, weight: .semibold)
b.addTarget(self, action: #selector(goToSecondController), for: .touchUpInside)
b.translatesAutoresizingMaskIntoConstraints = false
return b
}()
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .black
view.addSubview(goToSecondButton)
goToSecondButton.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
goToSecondButton.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
goToSecondButton.heightAnchor.constraint(equalToConstant: 50).isActive = true
goToSecondButton.widthAnchor.constraint(equalToConstant: 200).isActive = true
}
@objc fileprivate func goToSecondController() {
let controller = SecondController()
controller.modalPresentationStyle = .fullScreen
let transition = CATransition()
transition.duration = 0.3
transition.type = CATransitionType.push
transition.subtype = CATransitionSubtype.fromRight
guard let window = view.window else { return }
window.layer.add(transition, forKey: kCATransition)
present(controller, animated: false, completion: nil) // important, set animated to false
}
}
我的第二个控制器:
class SecondController: UIViewController {
let backToFirst: UIButton = {
let b = UIButton(type: .system)
b.layer.cornerRadius = 10
b.clipsToBounds = true
b.backgroundColor = .white
b.setTitleColor(.black, for: .normal)
b.setTitle("Back To first", for: .normal)
b.titleLabel?.font = .systemFont(ofSize: 16, weight: .semibold)
b.addTarget(self, action: #selector(backToFirstController), for: .touchUpInside)
b.translatesAutoresizingMaskIntoConstraints = false
return b
}()
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .red
view.addSubview(backToFirst)
backToFirst.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
backToFirst.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
backToFirst.heightAnchor.constraint(equalToConstant: 50).isActive = true
backToFirst.widthAnchor.constraint(equalToConstant: 200).isActive = true
}
@objc fileprivate func backToFirstController() {
let controller = FirstController()
controller.modalPresentationStyle = .fullScreen
let transition = CATransition()
transition.duration = 0.3
transition.type = CATransitionType.push
transition.subtype = CATransitionSubtype.fromLeft
guard let window = view.window else { return }
window.layer.add(transition, forKey: kCATransition)
present(controller, animated: false, completion: nil) // important, set animated to false
}
}
这是结果
这是一个没有过渡的例子:
我的第一个控制器:
class FirstController: UIViewController {
let goToSecondButton: UIButton = {
let b = UIButton(type: .system)
b.layer.cornerRadius = 10
b.clipsToBounds = true
b.backgroundColor = .red
b.setTitleColor(.white, for: .normal)
b.setTitle("Go to second", for: .normal)
b.titleLabel?.font = .systemFont(ofSize: 16, weight: .semibold)
b.addTarget(self, action: #selector(goToSecondController), for: .touchUpInside)
b.translatesAutoresizingMaskIntoConstraints = false
return b
}()
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .black
view.addSubview(goToSecondButton)
goToSecondButton.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
goToSecondButton.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
goToSecondButton.heightAnchor.constraint(equalToConstant: 50).isActive = true
goToSecondButton.widthAnchor.constraint(equalToConstant: 200).isActive = true
}
@objc fileprivate func goToSecondController() {
let controller = SecondController()
controller.modalPresentationStyle = .fullScreen
present(controller, animated: true, completion: nil)
}
}
我的第二个控制器:
class SecondController: UIViewController {
let backToFirst: UIButton = {
let b = UIButton(type: .system)
b.layer.cornerRadius = 10
b.clipsToBounds = true
b.backgroundColor = .white
b.setTitleColor(.black, for: .normal)
b.setTitle("Back To first", for: .normal)
b.titleLabel?.font = .systemFont(ofSize: 16, weight: .semibold)
b.addTarget(self, action: #selector(backToFirstController), for: .touchUpInside)
b.translatesAutoresizingMaskIntoConstraints = false
return b
}()
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .red
view.addSubview(backToFirst)
backToFirst.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
backToFirst.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
backToFirst.heightAnchor.constraint(equalToConstant: 50).isActive = true
backToFirst.widthAnchor.constraint(equalToConstant: 200).isActive = true
}
@objc fileprivate func backToFirstController() {
let controller = FirstController()
controller.modalPresentationStyle = .fullScreen
present(controller, animated: true, completion: nil)
}
}
这是结果:
我有一个 Ios
应用构建 Swift
UIKit
,
所有视图都嵌入在 soryboard 的底部导航中。
我想以编程方式从按钮单击的另一个视图导航到主视图(起始视图),因此不要将其显示在当前视图上方或将其推到顶部,这样就不会出现“后退”按钮,
就像用户第一次加载应用程序一样,
我怎样才能完成这样的事情?
如果我理解得很好,请将此代码放入您的点击操作函数中:
let controller = YourStartController()
controller.modalPresentationStyle = .fullScreen
present(controller, animated: true, completion: nil)
如果要更换导航控制器动画:
let controller = YourStartController()
let transition = CATransition()
transition.duration = 0.3
transition.type = CATransitionType.push
transition.subtype = CATransitionSubtype.fromLeft
guard let window = view.window else { return }
window.layer.add(transition, forKey: kCATransition)
present(YourStartController, animated: false, completion: nil) // important, set animated to false
编辑
这是一个转换示例:
我的第一个控制器:
class FirstController: UIViewController {
let goToSecondButton: UIButton = {
let b = UIButton(type: .system)
b.layer.cornerRadius = 10
b.clipsToBounds = true
b.backgroundColor = .red
b.setTitleColor(.white, for: .normal)
b.setTitle("Go to second", for: .normal)
b.titleLabel?.font = .systemFont(ofSize: 16, weight: .semibold)
b.addTarget(self, action: #selector(goToSecondController), for: .touchUpInside)
b.translatesAutoresizingMaskIntoConstraints = false
return b
}()
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .black
view.addSubview(goToSecondButton)
goToSecondButton.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
goToSecondButton.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
goToSecondButton.heightAnchor.constraint(equalToConstant: 50).isActive = true
goToSecondButton.widthAnchor.constraint(equalToConstant: 200).isActive = true
}
@objc fileprivate func goToSecondController() {
let controller = SecondController()
controller.modalPresentationStyle = .fullScreen
let transition = CATransition()
transition.duration = 0.3
transition.type = CATransitionType.push
transition.subtype = CATransitionSubtype.fromRight
guard let window = view.window else { return }
window.layer.add(transition, forKey: kCATransition)
present(controller, animated: false, completion: nil) // important, set animated to false
}
}
我的第二个控制器:
class SecondController: UIViewController {
let backToFirst: UIButton = {
let b = UIButton(type: .system)
b.layer.cornerRadius = 10
b.clipsToBounds = true
b.backgroundColor = .white
b.setTitleColor(.black, for: .normal)
b.setTitle("Back To first", for: .normal)
b.titleLabel?.font = .systemFont(ofSize: 16, weight: .semibold)
b.addTarget(self, action: #selector(backToFirstController), for: .touchUpInside)
b.translatesAutoresizingMaskIntoConstraints = false
return b
}()
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .red
view.addSubview(backToFirst)
backToFirst.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
backToFirst.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
backToFirst.heightAnchor.constraint(equalToConstant: 50).isActive = true
backToFirst.widthAnchor.constraint(equalToConstant: 200).isActive = true
}
@objc fileprivate func backToFirstController() {
let controller = FirstController()
controller.modalPresentationStyle = .fullScreen
let transition = CATransition()
transition.duration = 0.3
transition.type = CATransitionType.push
transition.subtype = CATransitionSubtype.fromLeft
guard let window = view.window else { return }
window.layer.add(transition, forKey: kCATransition)
present(controller, animated: false, completion: nil) // important, set animated to false
}
}
这是结果
这是一个没有过渡的例子:
我的第一个控制器:
class FirstController: UIViewController {
let goToSecondButton: UIButton = {
let b = UIButton(type: .system)
b.layer.cornerRadius = 10
b.clipsToBounds = true
b.backgroundColor = .red
b.setTitleColor(.white, for: .normal)
b.setTitle("Go to second", for: .normal)
b.titleLabel?.font = .systemFont(ofSize: 16, weight: .semibold)
b.addTarget(self, action: #selector(goToSecondController), for: .touchUpInside)
b.translatesAutoresizingMaskIntoConstraints = false
return b
}()
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .black
view.addSubview(goToSecondButton)
goToSecondButton.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
goToSecondButton.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
goToSecondButton.heightAnchor.constraint(equalToConstant: 50).isActive = true
goToSecondButton.widthAnchor.constraint(equalToConstant: 200).isActive = true
}
@objc fileprivate func goToSecondController() {
let controller = SecondController()
controller.modalPresentationStyle = .fullScreen
present(controller, animated: true, completion: nil)
}
}
我的第二个控制器:
class SecondController: UIViewController {
let backToFirst: UIButton = {
let b = UIButton(type: .system)
b.layer.cornerRadius = 10
b.clipsToBounds = true
b.backgroundColor = .white
b.setTitleColor(.black, for: .normal)
b.setTitle("Back To first", for: .normal)
b.titleLabel?.font = .systemFont(ofSize: 16, weight: .semibold)
b.addTarget(self, action: #selector(backToFirstController), for: .touchUpInside)
b.translatesAutoresizingMaskIntoConstraints = false
return b
}()
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .red
view.addSubview(backToFirst)
backToFirst.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
backToFirst.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
backToFirst.heightAnchor.constraint(equalToConstant: 50).isActive = true
backToFirst.widthAnchor.constraint(equalToConstant: 200).isActive = true
}
@objc fileprivate func backToFirstController() {
let controller = FirstController()
controller.modalPresentationStyle = .fullScreen
present(controller, animated: true, completion: nil)
}
}
这是结果: