addSubview(...)会导致其他窗口

时间:2014-10-01 22:53:43

标签: macos cocoa swift

使用addSubview()加载视图控制器视图时,我遇到了一种奇怪的行为:

硬件和软件: OSX 10.9.5 Mavericks上的Cocoa Swift App,XCode 6 Beta 6

目标: App,以编程方式从自己的xib加载ViewController并在主窗口上映射VC视图

MainMenu.xib: 只有一个视图的窗口(NSView)作为控制器视图的锚点

SpecialsVC.xib 查看(NSView)只有一个标签“特殊视图”,视图链接到文件所有者

AppDelegate的Swift代码和视图控制器SpecialsVC:

class SpecialsVC : NSViewController {
    required init(coder aDecoder: NSCoder!) { super.init(coder: aDecoder); }

    override init(nibName nibNameOrNil: String!, bundle nibBundleOrNil: NSBundle!) {
        super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
    }
}


class AppDelegate: NSObject, NSApplicationDelegate {

    @IBOutlet weak var window: NSWindow!
    @IBOutlet weak var anchorView: NSView!

    var specialsVC  = SpecialsVC(nibName: "SpecialsVC", bundle: nil );

    func applicationDidFinishLaunching(aNotification: NSNotification?) {
        anchorView.addSubview( specialsVC.view );    // <— 2nd window opens here
        specialsVC.view.frame = anchorView.bounds;
    }

    func applicationWillTerminate(aNotification: NSNotification?) {  }
}

运行应用 1)主窗口按预期打开,视图控制器从笔尖加载,其视图放在主窗口的锚视图上。 - &GT;好 2)打开标题为“窗口”的第二个和空窗口。可以关闭,对主窗口没有影响。 - &GT; ?????????

调试: 单步执行anchorView.addSubview(specialsVC.view)

时会出现意外窗口

也试过1: 不是以编程方式加载视图控制器,而是通过MainMenu.xib中View-Controller-Object的插座加载 - &gt;同样的效果

还试过2: 在主窗口上放置一个按钮,并将视图控制器加载到按钮操作中的局部变量中。 - &GT;没有第二个窗口出现,但离开操作时控制器丢失。将本地var复制到实例var - &gt;第二个窗口出现

提示: 当视图控制器视图的大小发生变化时,第二个窗口的大小不会改变。

我做错了什么?第二个窗口来自哪里?

亲切的问候乌尔里希

1 个答案:

答案 0 :(得分:0)

我认为您应该在specialsVC.view.frame = anchorView.bounds方法前加addSubview()。我认为否则他们会被忽略。它就像在return语句之后在函数中添加声明一样。