通过 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 的自定义控件的主要内容,如果未能解决你的问题,请参考以下文章