如何在MonoTouch中使用不同的视图/屏幕/ xib?

时间:2012-02-09 16:09:51

标签: c# ios ipad xamarin.ios monodevelop

我使用MonoTouch创建了一个单一视图ipad应用程序。我想为应用程序创建更多屏幕/视图。所以我在当前的解决方案中添加了一个新的ipad视图。当我这样做时,xib只被添加到解决方案中(视图控制器没有相应的.cs文件)。我在IB中设计了xib,但我不知道如何将它添加到现有的视图控制器中。

我希望我已经说清楚了,你能告诉我如何继续。

1 个答案:

答案 0 :(得分:1)

简单回答:

通常,您需要为每个xib配备一个视图控制器。如果您使用“iPad View Controller”模板,它将创建一个控制器类和一个xib文件供其加载。但是,您可以非常轻松地手动添加控制器类 - 或者只是复制现有的控制器类。

基本控制器类完成加载和管理xib的工作 - 通过将xib名称传递给基础构造函数来告诉它使用哪个:

public partial class MyViewController : UIViewController
{
    public MyViewController () : base ("MyXibName", null)
    ...

高级答案

“nib”是包含序列化UI对象的文件。 “xib”只是笔尖的XML表示。在构建应用程序包时,您的xib将被编译为nib。直接从应用包中加载nib的API是:

NSBundle.MainBundle.LoadNib (xibName, owner);

xib的名称是它的包资源ID - 文件名但没有扩展名。

这将加载nib,反序列化其中的所有对象,并将所有出口连接到owner对象。这就是您在Interface Builder中看到的“文件所有者”对象。您可以在IB中设置其类型,然后将对象连接到其出口和操作。从技术上讲,您在运行时使用的所有者对象的类型实际上并不重要,只要它具有与xib中的对象连接的相同的命名出口和操作,并且这些类型的类型是兼容的。

在运行时,nib和owner对象具有很大的灵活性。例如:

  • 视图控制器可以通过将不同的笔尖名称传递给基础构造函数来根据设备类型加载不同的笔尖。这对于通用应用程序(iPhone + iPad)非常有用。
  • nib可以包含许多UIViews并将它们连接到其所有者的多个出口,或者如果您不想拥有大量控制器,则单个控制器可以显式加载并拥有多个nib。
  • 不同的控制器可以加载相同的笔尖,但会将不同的数据加载到其小部件中。
  • 您可以拥有一个具有出口的基本控制器类,并且属于不同控制器类的许多nib可以连接到这些出口。