在我的应用程序中,我从初始视图控制器转到查看控制器2.在一些地方,在主要方式上我这样做
if let addVC = self.storyboard?.instantiateViewController(withIdentifier: ADD_CARD_STORYBOARD_IDENTIFIER) as? AddCardViewController {
let addNavigation = UINavigationController(rootViewController: addVC)
if UIDevice.current.userInterfaceIdiom == .pad {
self.splitViewController?.present(addNavigation, animated: true, completion: nil)
}
else {
self.present(addNavigation, animated: true, completion: nil)
}
}
我遇到过在iPad上工作的一些问题以及在iPhone上工作的事情,而不是相反。
在View Controller 2上,当我完成了我需要做的事情时,我使用
self.dismiss(animated: true, completion: nil)
这很有效。
但是,用户也可以点击一个按钮VC 1,它会调出一个UIAlertController
从UIAlertController我可以去第二个VC。然而就此而言,我没有在场(...我在做什么
if let addCardVC = self.storyboard?.instantiateViewController(withIdentifier: ADD_CARD_STORYBOARD_IDENTIFIER) as? AddCardViewController {
self.navigationController?.pushViewController(addCardVC, animated: true)
}
这就是我的问题所在。如果我做了推,然后尝试在第二个VC上解雇没有任何反应。
我试图在这里做礼物,但是当我做第二个VC时丢失了导航栏。
无论如何,我可以做现在并保留导航栏,还是我需要做其他事情?
答案 0 :(得分:0)
如果我理解的话,我现在不是真的,但似乎有两种方法可以通过VC1或UIAlertController转到VC2。
我建议你创建一个协议并在你的VC1中实现它,这样你就可以将它传递给你的UIAlertController(如果你有一个自定义的UIAlertController)。在解雇你的UIAlertController之后,你将调用由VC1实现的委托方法,然后它将负责推送视图控制器。例如:
协议
protocol VCDelegate {
pushToVC2()
}
VC1类:
class VC1: UIViewController, VCDelegate {
//...
let customAlertVC = CustomAlertViewController() // Declaring your custom alert view controller
override func viewDidLoad(){
super.viewDidLoad()
customAlertVC.delegate = self // Set its delegate
}
func pushToVC2(){ // implementing method to go to VC2
self.storyboard?.instantiateViewController(withIdentifier: ADD_CARD_STORYBOARD_IDENTIFIER) as? AddCardViewController {
self.navigationController?.pushViewController(addCardVC, animated: true)
}
}
}
自定义UIAlertViewController:
class CustomAlertViewController: AlertViewController {
// delegate to call the implemented method in VC1
var delegate: VCDelegate?
//...
func didTapButton(){
self.dismiss(animated: false) {
delegate.pushToVC2() // called on dismiss completion
}
}
}
答案 1 :(得分:0)
我发现了我的错误。我没有使用
let addNavigation = UINavigationController(rootViewController: addVC)
我只想说
if let addCardVC = self.storyboard?.instantiateViewController(withIdentifier: ADD_CARD_STORYBOARD_IDENTIFIER) as? AddCardViewController {
self.navigationController?.present(addCardVC, animated: true, completion: nil)
}
当我需要说
时if let addCardVC = self.storyboard?.instantiateViewController(withIdentifier: ADD_CARD_STORYBOARD_IDENTIFIER) as? AddCardViewController {
let addNavigation = UINavigationController(rootViewController: addCardVC)
self.navigationController?.present(addNavigation, animated: true, completion: nil)
}