5

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

我刚刚安装了 MonoDevelop (MD) 2.8。我期待的似乎不起作用。

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

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

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

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

  • Controller.xib <- 在同一棵树中不再存在
  • 控制器.cs
    • 控制器.designer.cs

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

另外,如果我打开一个 xib 文件,Controller.xib、IB 和 Xcode 都会打开。如果我将插座添加到 xib,则插座在设计器中不可见。

有什么建议么?

4

1 回答 1

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 创建一个带有 Objective-C 存根的临时 Xcode 项目,该项目镜像所有暴露给 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

于 2011-10-09T15:23:48.703 回答