0

我的设置

  • XCode 4.3.2
  • MacRuby 0.12 (ruby 1.9.2) [universal-darwin10.0, x86_64]
    • 截至 2012 年 6 月 4 日的最新每晚
  • 操作系统 10.7.3

目标

在 MainMenu.xib 的单独 XIB 中有一个带有一些控件的窗口,并且能够以编程方式打开该窗口。我不希望它在启动时打开。

尝试

  1. 我制作了一个新的 xib (Woot.xib) 并在其中创建了一个窗口
  2. 我创建了一个新的 Ruby 类

    class WootController < NSWindowController
        attr_accessor :window
        def windowNibName
             return 'Woot'
        end
    end
    
  3. 我试图将 Woot.xib 中的 File's Owner 的类设置为 WootController,但发现它不会< NSWindowController我的类定义中。如果我< NSWindowController从类定义中删除 ,则会填充出口,并且我可以将 XIB 中的窗口链接到我班级中的窗口出口。
  4. 从我的 AppDelegate 的applicationDidFinishLaunching方法内部,我尝试过

    试图

    newWind = WootController.new
    puts newWind #outputs "#<AddCredentialsDialog:0x400191180>"
    newWind.window().makeKeyAndOrderFront(self) # results in no method error for nil
    

    尝试 2

    newWind = WootController.initWithWindowNibName 'AddWindow'
    puts newWind #outputs "#<AddCredentialsDialog:0x400191180>"
    newWind.window().makeKeyAndOrderFront(self) # results in no method error for nil
    

问题

  1. 为什么我的任何一个尝试都不起作用?我已经准备好在 macruby 和使用 NSWindowController 上可以找到的所有内容。
  2. WootController如果我继承了我的类,为什么我不能链接它NSWindowController
  3. 除了将其全部放入 MainMenu.xib 之外,还有其他方法可以做到这一点吗?
4

1 回答 1

1

此解决方案有效

nib = NSNib.alloc.initWithNibNamed('Woot', bundle: nil)
newWind = WootController.new
nib.instantiateNibWithOwner(newWind, topLevelObjects:nil)
newWind.showWindow(self)

一些注意事项

  1. 在 Macruby 中,如果方法签名有命名参数,即使您只指定 nil 或方法签名不匹配并出现错误,您也必须使用它们。no method

    IE。obj.foo('hello', to_whom: nil)不一样obj.foo('hello')

  2. 如果有命名参数,则必须使用括号。

    IE。 obj.foo('hello', to_whom: nil)会起作用,不是这个 obj.foo 'hello', to_whom: nil

于 2012-06-05T13:32:30.510 回答