【问题标题】:addSubview(...) causes additional windowaddSubview(...) 导致附加窗口
【发布时间】:2014-10-01 22:53:43
【问题描述】:

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

硬件和软件: OSX 10.9.5 Mavericks、XCode 6 Beta 6 上的 Cocoa Swift 应用程序

目标: 应用程序,以编程方式从其自己的 xib 加载 ViewController 并将 VCs 视图映射到主窗口

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

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

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

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 ) 主窗口按预期打开,视图控制器从 nib 加载,其视图放置在主窗口的锚视图上。 —> 好的 2 ) 标题为“Window”的第二个空窗口打开。可以关闭,对主窗口没有影响。 —> ?????????

调试: 跨过anchorView.addSubview(specialsVC.view)时出现意外窗口

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

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

提示: 更改视图控制器视图的大小时,第二个窗口的大小不会更改。

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

向乌尔里希致敬

【问题讨论】:

  • specialsVC.xib 可能包含一个窗口,该窗口在 specialsVC.view 调用期间被实例化。再次检查您的 xib。
  • 将本地变量复制到实例变量 —> 出现第二个窗口 即即使没有 -[view] 调用,窗口也会显示?那么我在 xib 的想法上一定是错的。

标签: macos cocoa swift


【解决方案1】:

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

【讨论】:

  • 顺序并不重要。
  • 嗨,André,谢谢,但顺序并不重要,因为我们正在处理对对象的引用。
  • 嗨 user3125367 - 你是对的,我的 xib 中确实有一个未使用的窗口。多么可耻。
猜你喜欢
  • 2021-07-15
  • 2017-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-15
  • 1970-01-01
  • 1970-01-01
  • 2011-03-01
相关资源
最近更新 更多