在我的应用程序标识符中,来自服务器,我们使用它们作为视图控制器标识符。在这里,我想检查具有指定标识符的ViewController是否可用。如果可用,则只向该控制器推送,否则只返回。我已经编写了如下代码。
let identifier = Constants.menuSections[indexPath.section-1][indexPath.row-1]
if let vc1 = (self.storyboard?.instantiateViewController(withIdentifier:identifier)){
let navi = BaseNaviViewController(rootViewController:vc1)
navi.navigationBar.tintColor = .white
navi.navigationBar.titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white]
sideMenuController?.embed(centerViewController:navi, cacheIdentifier:identifier)
}else {
return
}
我说错了
由于“NSInvalidArgumentException”异常终止应用程序,原因:“Storyboard()不包含带有标识符”ABC“的视图控制器
最后,我找到了一个解决办法
extension UIStoryboard {
func instantiateVC(withIdentifier identifier: String) -> UIViewController? {
// "identifierToNibNameMap" – dont change it. It is a key for searching IDs
if let identifiersList = self.value(forKey: "identifierToNibNameMap") as? [String: Any] {
if identifiersList[identifier] != nil {
return self.instantiateViewController(withIdentifier: identifier)
}
}
return nil
}
}
我用了如下的方法
let identifier = Constants.menuSections[indexPath.section-1][indexPath.row-1]
if let viewController = UIStoryboard(name: "Main", bundle: nil).instantiateVC(withIdentifier: identifier) {
let navi = BaseNaviViewController(rootViewController:viewController)
navi.navigationBar.tintColor = .white
navi.navigationBar.titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white]
sideMenuController?.embed(centerViewController:navi, cacheIdentifier:identifier)
}
else {
ServerService.ShowAlertMessage(ErrorMessage: "No controller Available", title: "Oops . . . !", view: self)
}
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。