Monodevelop 2.8,XCode 3.2.6,Interface Builder:Outlets和Actions

时间:2011-10-08 16:24:33

标签: xcode interface-builder xamarin.ios monodevelop outlet

编辑:由于我还没有安装XCode 4,我想知道MD 2.8是否与XCode 3.2.6完全兼容。特别是,我能够使用MT documentation中描述的新程序连接Outlets和Actions吗?

我刚刚安装了MonoDevelop(MD)2.8。它似乎无法正常工作。

MD 2.6 中,当我创建一个新的UIViewController时,该控制器如下所示:

  • Controller.xib< - 在同一棵树内
    • Controller.xib.cs
    • Controller.xib.designer.cs

此外,如果我打开一个xib文件,Controller.xib,只打开Interface Builder(IB)。如果我向xib添加插座,则插件在Controller.xib.designer.cs中可见。

MD 2.8 中,当我创建一个新的UIViewController时,该控制器显示如下:

  • Controller.xib< - 不再在同一棵树内
  • Controller.cs
    • Controller.designer.cs

所以我有两个文件而不是一个。

此外,如果我打开一个xib文件,则会打开Controller.xib,IB和Xcode。如果我向xib添加插座,则设计器中不会显示插座。

有什么建议吗?

1 个答案:

答案 0 :(得分:6)

MonoDevelop 2.8引入了一个新的xib设计器模型,以支持Xcode 4。

Xcode 4中集成的Interface Builder不再支持在xib文件中定义类,出口和操作。这就是MonoDevelop不再可能使用从xib文件生成* .xib.designer.cs文件的模型。相反,Interface Builder从Objective-C源代码中读取出口和操作。 MonoDevelop的解决方案是将C#类同步到Objective-C存根。

当您从MonoDevelop 2.8打开xib文件时,MonoDevelop创建一个临时Xcode项目,其中Objective-C存根镜像所有暴露给Objective-C的C#类,即从NSObject继承并显式注册的类。 [Register("SomeName")]属性。然后,它会在该项目的上下文中打开xib文件,以便Interface Builder将查看所有可用类型以及它们上的出口和操作。如果使用其控制拖动系统在Xcode 4中添加了出口和操作,那么它们会自动导回到MonoDevelop中的* .designer.cs文件中。

这意味着不再从其他文件生成设计器文件,而是存储信息的实际位置。现在设计器文件与类而不是xib相关联。

除了支持Xcode 4之外,这个新模型还有几个好处:

  • 现在可以将多个xib文件引用到同一个类中。
  • 项目包含所有内容资源和其他xib文件,因此可以从Interface Builder
  • 轻松引用它们
  • Interface Builder将“看到”在C#用户类部件和基类上编写的插座,而不仅仅是设计器类部件。

此外,现在手动编写插座要容易得多。只需将Outlet属性应用于属性,例如

[Outlet ("someView")]
UIView SomeView {get; set; }

不幸的是,新模型意味着MonoDevelop不再集成在Interface Builder 3.2.x中创建出口和操作。我的建议是你升级到Xcode 4.加载和编辑pre-MD 2.8项目应该可以正常工作。

请看 http://docs.xamarin.com/ios/tutorials/transitioning_from_xcode_3_to_xcode_4

相关问题