我在.xib中创建了一个视图。在上面,我放置了一个按钮,要在该按钮上打开另一个ViewController。我为此故事控制器分配了一个StoryboardID。但是我不能推新的控制器,这个问题怎么解决?
我的代码:
class MyView: UIView {
...
@IBAction func buttonPressed(_ sender: Any) {
let storyboard = UIStoryboard.init(name: "ViewController", bundle: Bundle.init())
let vc = storyboard.instantiateViewController(withIdentifier: "VC") as! ViewController
let navigationController = UINavigationController.init()
navigationController.pushViewController(vc, animated: true)
}
...
}
class ViewController: UIViewController {
...
}
Xcode出现此错误:
“找不到名为'ViewController'的故事板
但是我检查了没有错误。我重新加载了Xcode-没有结果。
答案 0 :(得分:0)
似乎您有多个问题。
UIViewController
推入未显示的UINavigationController
UIStoryboard
创建实例且标识符错误首先,您需要选择正确的UIStoryboard
(我假设它是主要),然后您必须出示UINavigationController
来自持有人UIViewController
或尝试如果有UIViewController
,则从该UINavigationController
进行推送,
第1部分:修复实例,
let storyboard = UIStoryboard.init(name: "main", bundle: Bundle())
let vc = storyboard.instantiateViewController(withIdentifier: "VC") as! ViewController
let navigationController = UINavigationController(rootViewController: vc)
现在您拥有一个navigationController
的{{1}}
第2部分:您想从您的持股VC
中呈现此导航,您可以从该VC
向UIButton
添加一个侦听器,然后从那里显示/推送
因此,让我们总结一下,在您的VC
中创建一个包含VC
的函数
UIView
然后在您的@objc func pushToMyVc() {
let storyboard = UIStoryboard.init(name: "main", bundle: Bundle())
let vc = storyboard.instantiateViewController(withIdentifier: "VC") as! ViewController
let navigationController = UINavigationController(rootViewController: vc)
}
中添加此变量UIView
现在var selector: (() -> Void)?
中调用此函数@IBAction func buttonPressed
现在,我们需要的是传递单击该按钮时要使用的功能(在我们的案例中,该功能selector?()
我们放置在主pushToMyVC
中,因此在我们的UIViewController
中或您在哪里调用此自定义视图
像这样设置选择器
didLoad
侧面说明:您不能从非显示/推送
myView.selector = pushtoMyVC
UIViewController
个课程
答案 1 :(得分:0)
尝试更改从中获取情节提要的方式
let storyboard = UIStoryboard.init(name: "ViewController", bundle: Bundle.init())
到
let storyboard = UIStoryboard(name: "ViewController", bundle: nil)
请注意,情节提要ID必须精确为ViewController
。
如果仍然显示相同的错误,我想说您是情节提要目标成员身份存在问题,因此请在Xcode编辑器右侧的文件检查器中进行检查。
答案 2 :(得分:0)
您应该再次检查Storyboard文件的名称,因为要从Storyboard文件初始化UIViewController
时,name
初始化中的UIStoryboard
参数必须与故事板文件名。
@IBAction func buttonPressed(_ sender: Any) {
// Let's say that you have a Storyboard file named ViewController.storyboard and a UIViewController class named ViewController.swift
let destinationVC = UIStoryboard(name: "ViewController", bundle: nil).instantiateViewController(withIdentifier: "VC") as! ViewController
self.navigationController?.pushViewController(destinationVC, animated: true)
}
希望这可以解决您的问题
答案 3 :(得分:-1)
您应该带一个代表回到包含当前视图的viewController,然后从那里调用navigationController.push