【问题标题】:Can I build RubyMotion apps with Interface Builder?我可以使用 Interface Builder 构建 RubyMotion 应用程序吗?
【发布时间】:2012-05-13 17:01:01
【问题描述】:

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

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

【问题讨论】:

标签: ios interface-builder rubymotion


【解决方案1】:

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

  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
    

【讨论】:

【解决方案2】:

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

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

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

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

【讨论】:

    【解决方案3】:

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

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

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

    【讨论】:

    • 也许您可以多说一些关于如何将 XIB 编译成 NIB 以用于 RubyMotion 项目的信息?这似乎是棘手的部分......
    • 你可以使用ibtool。棘手的部分是连接插座和操作,因为您不能使用 XCode 的拖放功能。
    • 我尝试这样做,传递选项--compile--flatten NO,但它不断向我抛出NSInternalInconsistencyException。我正在使用myViewController.alloc.initWithNibName("MyViewController", bundle:nil) 加载它,您如何运行ibtool 来获取可加载的 nib 文件?
    【解决方案4】:

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

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

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

    【讨论】:

    • 下一个版本的 ruby​​ mine IDE 支持 ruby​​ 运动开发和 Cocoa API 的自动完成。所以这可能会帮助你
    【解决方案5】:

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

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

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

    • 约翰内斯

    【讨论】:

      【解决方案6】:

      有人做到了:

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

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

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

      http://rubymotion-wrappers.com/

      希望对你有帮助

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多