gpt4 book ai didi

ios - 从 nib 文件所有者加载 ViewController

转载 作者:行者123 更新时间:2023-11-28 11:27:44 25 4
gpt4 key购买 nike

我有一个用 nib 制作的设计,围绕所有 ViewController,我正在加载该 nib 设计。

因为这是常见的页脚,所以我设法在所有其他 View Controller 的页脚中使用它。

现在我想要什么:我希望每当用户点击页脚时,它必须启动一个新的 View Controller ,它将显示您可以说的“关于我们” View Controller 。

我在做什么:

// ON CLICK OF FOOTER I AM DOING 
let mAboutUs = self.storyboard?.instantiateViewController(withIdentifier: "idAboutUs") as! AboutUs
mAboutUs.modalPresentationStyle = .fullScreen
self.present(mAboutUs, animated: true) {

}

但是我得到以下错误

Value of type 'FooterView' has no member 'storyboard'

我的理解:我认为从 nib 文件我们不能启动一个新的 ViewController,但我真的不想在我添加了这个 nib (FooterView) 的所有其他 View Controller 中做这件事作为我在每个 View Controller 底部的页脚 View 。

请帮帮我!!!

最佳答案

UIView 子类不包含 storyboard 属性,它用于 vc 子类,您需要

let vc = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "idAboutUs") as! AboutUs

如果你想在 View 中显示一个 vc FooterView 然后添加一个委托(delegate)

weak var delegate:VCName?

创建实例时

let ins = FooterView() // or from storyboard 
ins.delegate = self

然后使用

delegate?.present(mAboutUs, animated: true)

在 View 的类中


您可以使用所有 vcs 都符合的委托(delegate),但最简单的是添加此扩展

extension UIViewController {
func topMostViewController() -> UIViewController {

if let presented = self.presentedViewController {
return presented.topMostViewController()
}

if let navigation = self as? UINavigationController {
return navigation.visibleViewController?.topMostViewController() ?? navigation
}

if let tab = self as? UITabBarController {
return tab.selectedViewController?.topMostViewController() ?? tab
}

return self
}
}

然后

 guard let currentVC =  (UIApplication.shared.delegate as! AppDelegate).window?.rootViewController.topMostViewController() else { return } 
currentVC.present(mAboutUs, animated: true)

关于ios - 从 nib 文件所有者加载 ViewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57675269/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com