我有一个自定义UIView
子类(AccountInfoModal
),它通过将其添加为子视图而显示在ViewController
之上。 AccountInfoModal
有一个按钮,应该会显示另一个ViewController
。
初始化其他ViewController
并不是问题所在。提出它是。
由于AccountInfoModal
不是ViewController
,我无法使用.present(viewControllerToPresent...)
。
如何从UIView内部呈现另一个ViewController。我无法理解。
编辑: 我已经实施了这个建议:
let underlyingVC = UIApplication.shared.keyWindow?.rootViewController
underlyingVC?.performSegue(withIdentifier: "SEGSignInViewController", sender: nil)
但它导致最后一行崩溃(无法在bundle中加载NIB:...)。
答案 0 :(得分:0)
试试这个:
在AccountInfoModal文件中创建一个AccountInfoModal类以上的协议:
protocol AccountInfoModalDelegate : class {
func willPresentingViewController(){
}
在AccountInfoModal类中定义delegate
变量:
weak var delegate?
内部按钮动作调用:
delegate?.willPresentingViewController()
在ViewController文件中添加以下内容:
extension ViewController : AccountInfoModalDelegate {
func willPresentingViewController(){
let vc = AnotherVC()
self.present(vc, animated : true, completion : nil)
}
}
最后一步,在您调用的地方设置AccountInfoModal delegate = self
的实例以显示AccountInfoModal视图
答案 1 :(得分:0)
给AccountInfoModal
一个包含ViewController的属性。将AccountInfoModal
视图安装为子视图时设置它。然后使用它来呈现另一个视图控制器。
答案 2 :(得分:0)
最简单的方法 - 从根UIViewController呈现UIViewController:
let vc = UIViewController() //Your UIViewController
let rootVC = UIApplication.shared.keyWindow?.rootViewController //UIViewController from where you will present your UIViewController
rootVC?.present(vc, animated: true, completion: nil) //Present method