22

Ruby Motion刚刚问世,截屏视频似乎没有说明您是否可以使用 Interface Builder 来构建您的界面并将它们集成到您的 RubyMotion 项目中。这样的事情可能吗?或者我真的有手工编写所有代码,更不用说为 iPhone/iPad 维护不同的代码了?

我的代表不够高,无法创建 ruby​​motion 标签,因此请在适当时提供帮助。

4

6 回答 6

38

我只想指出,RubyMotion 1.3 现在支持自动编译.xib您放入resources文件夹的文件。所以现在工作流程变成了:

  1. 使用 XCode创建.xib文件(无需创建项目,只需使用 File|New...|File)并将其保存到resources文件夹中。由于尚不支持插座,因此请注意为tag要在代码中使用的每个控件设置属性(您可以在“视图”标题下的每个组件的属性表中找到)。
  2. RubyMotion 会负责将您的.xib文件编译成一个.nib文件,所以请尽情享受 :)
  3. 在您的UIViewController派生类中,使用 加载笔尖loadNibNamed:owner:options:,如下所示。
  4. viewDidLoad中,使用 获取您的各种组件viewWithTag:并使用添加事件处理程序addTarget:action:forControlEvents:,如下所示。
  5. 作为奖励,下次您想编辑您的 xib 时,只需执行open resources/MyView.xib,它只会启动 XCode 的好部分。

    class CalculatorViewController < UIViewController
        def loadView
            views = NSBundle.mainBundle.loadNibNamed "Keyboard", owner:self, options:nil
            self.view = views[0]
        end
    
        def viewDidLoad
            button = view.viewWithTag 1
            button.addTarget self, action:'buttonTapped:', forControlEvents:UIControlEventTouchUpInside
        end
    
        def buttonTapped(button)
            # ...
        end
    end
    
于 2012-05-10T13:17:53.920 回答
6

是的,您可以在 RubyMotion 中使用 Interface Builder。

位于资源目​​录中的 .xib 文件会自动编译为 .nib 文件并可供您的项目使用。

如果您愿意,甚至还有一种方法可以支持网点:

https://github.com/yury/ib#readme
http://ianp.org/2012/05/07/rubymotion-and-interface-builder/

于 2012-08-29T22:32:06.597 回答
1

但是,如果您真的想使用 IB,那么您仍然可以使用它来布置您的 UI 并调用

NSBundle.mainBundle.loadNibNamed(MY_NIB_NAME, owner:self, options:nil)

或类似的。我认为 RubyMotion 不会进行任何名称修改,因此您可以通过显式设置它们来使用 IB 中的 ruby​​ 类。

于 2012-05-04T16:28:02.487 回答
1

您可能可以在 IB 中构建接口并调用命令行工具将 XIB 编译为 NIB。

但是,您将无法连接出口或分配操作,因为 IB 无法解析 Ruby 源文件中的IBOutletIBAction标记。通常,NIB 加载代码会在加载您的 NIB 后为您建立这些连接。您必须自己在代码中执行此操作。

在 RubyMotion 的两个明显弱点中,对我来说这是最糟糕的。(另一个是缺乏代码完成将使编写 Cocoa API 变得非常乏味。)

于 2012-05-04T18:21:19.193 回答
1

卡布奇诺也有同样的问题。他们开发了一个名为 XcodeCapp 的工具:https ://github.com/cappuccino/cappuccino/tree/master/Tools/XcodeCapp

它创建“虚拟”Obj-C 文件,您可以在 IB 中将您的出口和操作连接到这些文件,在后台自动解析它们,并使您能够使用 IB 来布局您的卡布奇诺 UI。

应该可以对 RubyMotion 采取类似的方法(如果你真的想使用 IB)。

  • 约翰内斯
于 2012-05-07T14:29:41.260 回答
0

有人做到了:

这是一个教程视频:https ://www.youtube.com/watch?v=cOapNvehbg4

这是网站https://github.com/yury/ib

额外提示:要查找 ruby​​motion 的包装器,请检查此源

http://rubymotion-wrappers.com/

希望这可以帮助

于 2014-03-21T23:55:53.047 回答