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

Posted

技术标签:

【中文标题】通过 monotouch 绑定在 Interface Builder 中创建为 UIView 的自定义控件【英文标题】:Bind a custom control created as UIView in Interface Builder via monotouch 【发布时间】:2011-05-06 21:57:58 【问题描述】:

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

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

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

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

在尝试的一种方法中,我通过 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 加载内容?

【问题讨论】:

【参考方案1】:

看看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 加载用户界面。

【讨论】:

【参考方案2】:

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

【讨论】:

以上是关于通过 monotouch 绑定在 Interface Builder 中创建为 UIView 的自定义控件的主要内容,如果未能解决你的问题,请参考以下文章

帮助在monotouch中绑定一个静态objective-c库

MonoTouch 是不是有任何数据绑定支持?

应用程序委托问题,MonoTouch

无法在 monotouch 中使用本机库

Monotouch中的自定义UITabBar

通过添加图像使用 MonoTouch 自定义导航栏