我没有找到有关此问题的文章,但没有一个解决我的问题。
就像我说的那样。
我试图将ViewControllerB
添加为ViewControllerA
的子视图,但是它
抛出类似“ fatal error: unexpectedly found nil while unwrapping an Optional value
” 的错误。
下面是代码…
ViewControllerA
var testVC: ViewControllerB = ViewControllerB();
override func viewDidLoad()
{
super.viewDidLoad()
self.testVC.view.frame = CGRectMake(0, 0, 350, 450);
self.view.addSubview(testVC.view);
// Do any additional setup after loading the view.
}
ViewControllerB只是一个带有标签的简单屏幕。
ViewControllerB
@IBOutlet weak var test: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
test.text = "Success" // Throws ERROR here "fatal error: unexpectedly found nil while unwrapping an Optional value"
}
EDIT
根据用户答案的建议解决方案,ViewControllerA中的ViewControllerB不在屏幕上。灰色边框是我
一些观察:
ViewControllerB()
。如果该视图控制器以编程方式创建其视图(这是不寻常的),那就很好了。但是,IBOutlet建议的存在暗示了第二个视图控制器的场景是在Interface Builder1z
中定义的,但是通过调用ViewControllerB()
,您并没有给情节提要板实例化该场景并连接所有出口的机会。因此,隐式解包的UILabel是nil,导致出现错误消息。Interface Builder
中为目标视图控制器提供一个“ storyboard id” ,然后可以使用instantiateViewController(withIdentifier:
)它实例化(并连接let controller = storyboard!.instantiateViewController(withIdentifier: "scene storyboard id")
You can now access this controller
‘s view
.
addSubview
(i.e. you’re not transitioning to the next scene), then you are engaging in a practice called “view controller containment”. You do not just want to simply addSubview
. You want to do some additional container view controller calls, e.g.:let controller = storyboard!.instantiateViewController(withIdentifier: "scene storyboard id")
addChild(controller)
controller.view.frame = … // or, better, turn off translatesAutoresizingMaskIntoConstraints
and then define constraints for this subview
view.addSubview(controller.view)
controller.didMove(toParent: self)
For more information about why this
addChild
(previously called addChildViewController
) and
didMove(toParent:)
(previously called didMove(toParentViewController:)
) are necessary, see
WWDC 2011 video #102 - Implementing UIViewController
Containment. In short,
you need to ensure that your view controller hierarchy stays in sync with your
view hierarchy, and these calls to addChild
and didMove(toParent:)
ensure
this is the case.
另请参阅 《View Controller编程指南》中的“ 创建自定义容器View
Controller ”。
顺便说一句,以上说明了如何以编程方式执行此操作。它
实际上是容易得多,如果您使用界面生成器“容器视图”。
在此处输入图片说明
这样,您就不必担心与这些与收容相关的任何呼叫,
Interface Builder会为您解决。
For Swift 2 implementation, see previous revision of this
answer.
我找到了一些关于这个问题的帖子,但是没有一个能解决我的问题。 说像我已经... ViewControlllerA ViewControlllerB 我试图将ViewControlllerB添加为ViewControlllerA中的子视图,但是,它抛出了一个错误,如""。 下面是代码。。。 视图控制器 ViewControllerB只是一个带有标签的简单屏幕。 视图控制器B 编辑
以下的一段代码相当于定义一个ParameterizableViewController视图控制器的快捷方式,该控制器会立即将一个请求转发(forwards)给一个视图。请确保仅在以下情景下才使用这个类:当控制器除了将视图渲染到响应中外不需要执行任何逻辑时。 以下是一个例子,展示了如何在MVC Java编程配置方式下将所有"/"请求直接转发给名字为"home"的视图: @Configuration
问题内容: 我有一个storyviewcontroller,它的视图上有对象。我需要更改UILabel(在storyviewcontroller中)上的文本,并将视图加载到数组上。我已将IBOutlet连接到storyviewcontroller中的标签。 我已经创建了storyviewcontroller类的对象,并且能够访问其变量。但是,在创建storyviewcontroller的对象之后,
我想做的是: 由父视图控制器管理的父视图不应旋转。 由子视图控制器管理的子视图应该旋转到所有方向。 我所尝试的: 家长视图控制器 儿童视图控制器 Xcode部署信息中支持的方向设置为所有四个。 我得到的: 没有视图的旋转。如果将父视图的旋转设置为“全部”,则所有视图将一起旋转。所以要么全有要么全无。 更新 当我尝试放置UIDeviceOrientationIDChangeNotification的
CodeIgniter 的开发基于 MVC(模型-视图-控制器)设计模式。MVC 是一种 用于将应用程序的逻辑层和表现层分离出来的软件方法。在实践中,由于这种分离 所以你的页面中只包含很少的 PHP 脚本。 模型 代表你的数据结构。通常来说,模型类将包含帮助你对数据库进行增删改查的方法。 视图 是要展现给用户的信息。一个视图通常就是一个网页,但是在 CodeIgniter 中, 一个视图也可以是一
问题内容: 题 如何仅使用按钮的touch up内部事件从一个视图控制器导航到另一个视图控制器? 更多信息 我在一个示例项目中尝试执行的步骤是: 创建示例单视图应用程序。 为用户界面(ViewController2)添加一个新文件->具有XIB的Objective-C类。 在ViewController.xib中添加一个按钮,并控制单击ViewController.h的按钮以创建内部补全事件。 转