如何在Interface Builder文件中使用自定义iOS视图(位于引用的类库中)?

时间:2015-07-30 10:03:09

标签: ios xamarin storyboard custom-view

我有两个项目。第一个是iOS-App,它引用了一个具有目标框架Xamarin.iOS的类库。在该类库中,我实现了一个继承自CustomView的{​​{1}}。我还使用UIView属性注册了它。

因此,在界面设计器中,我将预先填充的信息用作将"Register"拖到我的UIView后将此类用作自定义类。但是当我运行应用程序时,我得到以下信息:

ViewController

如果我将我的"Unknown class MyCustomView in Interface Builder file." 从类库项目移动到我的第一个项目中,那么它将按预期运行。

有人知道如何在Interface Builder文件中使用位于引用类库中的CustomView吗?

1 个答案:

答案 0 :(得分:4)

我认为Register跨越项目边界是不可能的。在我的测试中,即使您使用完全相同的命名空间,仍然会出现错误。

另一方面, 可能是使用代理类并使用继承将所需行为带到代理。

基本上,归结为:

1)在您的资源库中,您定义自定义UIView并实施您要分享的任何行为:

public class MyCustomUIView : UIView
{
    public MyCustomUIView(IntPtr ptr) : base (ptr)
    {
    }

    public override void AwakeFromNib()
    {
        // Do something beautiful here...
        AddSubview(new UILabel(new CGRect(0,0,200,30)) { Text = "I live in the library"});
        BackgroundColor = UIColor.Green;
    }
}

请注意,我们不会Register此课程,因为它无论如何都不会起作用。

2)现在,在您的应用项目中,打开界面设计器或XCode中的故事板,并为占位符UIView指定一个全新的名称。就我而言,我选择了MyCustomUIViewProxy。 Xamarin studio将为您创建两个文件:MyCustomUIViewProxy.cs和MyCustomUIViewProxy2.designer.cs。请注意,在designer.cs文件中,Xamarin会自动Register编辑您的代理类。

3)现在我们所要做的就是使用继承,使代理行为与原始代理一样:在MyCustomUIViewProxy.cs中,我们将基类从UIView更改为MyCustomUIView,我们'很高兴去:

partial class MyCustomUIViewProxy : MyCustomUIView
{
    public MyCustomUIViewProxy (IntPtr handle) : base (handle)
    {
    }
}

就是这样:

enter image description here