通过monotouch绑定在Interface Builder中创建为UIView的自定义控件

时间:2011-05-06 21:57:59

标签: interface-builder xamarin.ios custom-controls

使用monotouch和monodevelop,我想创建一个自定义控件。 我按照这个步骤:

  • 将新文件添加为“iPhone View”(称之为TestView)
  • 在Interface Builder中编辑TestView.xib,es。改变它的背景和大小
  • 在Interface Builder中编辑MainWindow.xib,添加UIView并将其类标识设置为“TestView”。

此时,我想启动应用程序并在MainWindow的UIView中查看TestView实例的内容。

为了获得这个“绑定”,我尝试了几个步骤(我知道可以通过代码创建出口等来完成..但是我想了解它是否可以通过Interface builder完成)。 / p>

在其中一个尝试的方法中,我通过Interface Builder将值“TestView”设置为TestView.xib视图中的类标识符:这样MonoTouch就在TestView.xib.designer.cs中创建了代码。

[MonoTouch.Foundation.Register("TestView7")]
public partial class TestView7 {
}

然后,在TestView.xib.cs中,我添加了:

public partial class TestView : UIView
{
    public TestView (IntPtr p) : base(p)
    {
    }       
 }

当我启动应用程序时,我无法在MainWindow视图中看到TestView的内容,但如果在TestView构造函数中我添加了诸如

之类的内容

BackgroundColor = UIColor.Yellow;

然后,我可以在MainWindow中看到TestView ...或者更好我只能看到黄色矩形,而不是真实内容!

所以,问题是TestView被绑定到MainWindow中的UIView,但它的内容仅来自代码,而不是来自TestView.xib中通过Interface Builder定义的内容。

有没有办法从TestView.xib加载内容?

2 个答案:

答案 0 :(得分:0)

查看http://ios.xamarin.com/Documentation/API_Design#Interface_Builder_Outlets_and_C.23

我相信你需要做的是添加一个处理nib文件的构造函数(以下是来自上面的链接):

使用MonoTouch时,您的应用程序需要创建一个派生自UIViewController的类,并按如下方式实现:

public class MyViewController : UIViewController {
    public MyViewController (string nibName, NSBundle bundle) : base (nibName, bundle)
    {
    // You can have as many arguments as you want, but you need to call
    // the base constructor with the provided nibName and bundle.
    }
} 

然后从NIB文件加载ViewController,执行以下操作:

    var controller = new MyViewController ("HelloWorld", NSBundle.MainBundle, this); 

这将从NIB加载用户界面。

答案 1 :(得分:0)

Allison A在SO monotouch - reusable iOS custom view中的回答解释了如何将在Interface Builder中创建的现有复合视图加载到自定义视图中。