我刚刚安装了MonoDevelop(MD)2.8。它似乎无法正常工作。
在 MD 2.6 中,当我创建一个新的UIViewController时,该控制器如下所示:
此外,如果我打开一个xib文件,Controller.xib,只打开Interface Builder(IB)。如果我向xib添加插座,则插件在Controller.xib.designer.cs中可见。
在 MD 2.8 中,当我创建一个新的UIViewController时,该控制器显示如下:
所以我有两个文件而不是一个。
此外,如果我打开一个xib文件,则会打开Controller.xib,IB和Xcode。如果我向xib添加插座,则设计器中不会显示插座。
有什么建议吗?
答案 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之外,这个新模型还有几个好处:
此外,现在手动编写插座要容易得多。只需将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