Monodevelop 2.8、XCode 3.2.6、Interface Builder:Outlets 和 Actions
Posted
技术标签:
【中文标题】Monodevelop 2.8、XCode 3.2.6、Interface Builder:Outlets 和 Actions【英文标题】:Monodevelop 2.8, XCode 3.2.6, Interface Builder: Outlets and Actions 【发布时间】:2011-10-08 16:24:33 【问题描述】:编辑:由于我还没有安装 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 控制器.cs Controller.designer.cs所以我有两个文件而不是一个。
另外,如果我打开一个 xib 文件,Controller.xib、IB 和 Xcode 都会打开。如果我将插座添加到 xib,则插座在设计器中不可见。
有什么建议吗?
【问题讨论】:
我还不太熟悉 MonoDevelop 等,但是您是否注意到有关 MonoDevelop 和 MonoTouch 现在使用 Xcode 4 的博客文章? 【参考方案1】: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
【讨论】:
非常感谢您的回复。很有帮助。 这是否意味着在升级到 MD 2.8 和 Xcode 4 的项目中使用 MD 2.6 和 Xcode 3 生成的 XIB 会保持旧格式并一直工作,直到我需要更改某些内容?以上是关于Monodevelop 2.8、XCode 3.2.6、Interface Builder:Outlets 和 Actions的主要内容,如果未能解决你的问题,请参考以下文章
调试器无法连接到 Monodevelop(模拟器和真实设备)
使用 Monodevelop C# 在 iPad 中创建 UITableView
在 Spring Boot 应用程序中将 mongo db 升级到 3.2