Ruby Motion刚刚问世,截屏视频似乎没有说明您是否可以使用 Interface Builder 来构建您的界面并将它们集成到您的 RubyMotion 项目中。这样的事情可能吗?或者我真的有手工编写所有代码,更不用说为 iPhone/iPad 维护不同的代码了?
我的代表不够高,无法创建 rubymotion 标签,因此请在适当时提供帮助。
Ruby Motion刚刚问世,截屏视频似乎没有说明您是否可以使用 Interface Builder 来构建您的界面并将它们集成到您的 RubyMotion 项目中。这样的事情可能吗?或者我真的有手工编写所有代码,更不用说为 iPhone/iPad 维护不同的代码了?
我的代表不够高,无法创建 rubymotion 标签,因此请在适当时提供帮助。
我只想指出,RubyMotion 1.3 现在支持自动编译.xib
您放入resources
文件夹的文件。所以现在工作流程变成了:
.xib
文件(无需创建项目,只需使用 File|New...|File)并将其保存到resources
文件夹中。由于尚不支持插座,因此请注意为tag
要在代码中使用的每个控件设置属性(您可以在“视图”标题下的每个组件的属性表中找到)。.xib
文件编译成一个.nib
文件,所以请尽情享受 :)UIViewController
派生类中,使用 加载笔尖loadNibNamed:owner:options:
,如下所示。viewDidLoad
中,使用 获取您的各种组件viewWithTag:
并使用添加事件处理程序addTarget:action:forControlEvents:
,如下所示。作为奖励,下次您想编辑您的 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
是的,您可以在 RubyMotion 中使用 Interface Builder。
位于资源目录中的 .xib 文件会自动编译为 .nib 文件并可供您的项目使用。
如果您愿意,甚至还有一种方法可以支持网点:
https://github.com/yury/ib#readme
http://ianp.org/2012/05/07/rubymotion-and-interface-builder/
但是,如果您真的想使用 IB,那么您仍然可以使用它来布置您的 UI 并调用
NSBundle.mainBundle.loadNibNamed(MY_NIB_NAME, owner:self, options:nil)
或类似的。我认为 RubyMotion 不会进行任何名称修改,因此您可以通过显式设置它们来使用 IB 中的 ruby 类。
您可能可以在 IB 中构建接口并调用命令行工具将 XIB 编译为 NIB。
但是,您将无法连接出口或分配操作,因为 IB 无法解析 Ruby 源文件中的IBOutlet
和IBAction
标记。通常,NIB 加载代码会在加载您的 NIB 后为您建立这些连接。您必须自己在代码中执行此操作。
在 RubyMotion 的两个明显弱点中,对我来说这是最糟糕的。(另一个是缺乏代码完成将使编写 Cocoa API 变得非常乏味。)
卡布奇诺也有同样的问题。他们开发了一个名为 XcodeCapp 的工具:https ://github.com/cappuccino/cappuccino/tree/master/Tools/XcodeCapp
它创建“虚拟”Obj-C 文件,您可以在 IB 中将您的出口和操作连接到这些文件,在后台自动解析它们,并使您能够使用 IB 来布局您的卡布奇诺 UI。
应该可以对 RubyMotion 采取类似的方法(如果你真的想使用 IB)。
有人做到了:
这是一个教程视频:https ://www.youtube.com/watch?v=cOapNvehbg4
这是网站https://github.com/yury/ib
额外提示:要查找 rubymotion 的包装器,请检查此源
http://rubymotion-wrappers.com/
希望这可以帮助