菜鸟教程小白 发表于 2022-12-13 11:20:06

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


                                            <p><p>我有两个项目。第一个是 iOS 应用程序,它使用目标框架 <code>Xamarin.iOS</code> 引用类库。在那个类库中,我实现了一个继承自 <code>UIView</code> 的 <code>CustomView</code>。我还用 <code>"Register"</code> 属性注册了它。 </p>

<p>因此,在我将 <code>UIView</code> 拖到我的 <code>ViewController</code> 之后,在界面设计器中,我得到了预填充的信息以将此类用作自定义类。但是当我运行应用程序时,我会得到以下信息:</p>

<pre><code>&#34;Unknown class MyCustomView in Interface Builder file.&#34;
</code></pre>

<p>如果我将我的 <code>CustomView</code> 从类库项目移动到我的第一个项目中,那么它将按预期运行。 </p>

<p>有人知道如何在 Interface Builder 文件中使用位于引用类库中的 <code>CustomView</code> 吗?</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>我认为<code>Register</code> 不可能跨越项目边界。在我的测试中,即使你使用完全相同的命名空间,你仍然会报错。</p>

<p>另一方面,<em>是</em>可能的是使用代理类并利用继承将所需的行为带到代理。 </p>

<p>基本上可以归结为:</p>

<p>1) 在您的库中,您定义自定义 <code>UIView</code> 并实现您想要共享的任何行为:</p>

<pre><code>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 = &#34;I live in the library&#34;});
      BackgroundColor = UIColor.Green;
    }
}
</code></pre>

<p>请注意,我们不<code>注册</code>这个类,因为它无论如何都不会工作。 </p>

<p>2) 现在,在您的应用项目中,在界面设计器或 XCode 中打开 Storyboard,并为您的占位符 <code>UIView</code><strong>分配一个全新的名称</strong>。在我的例子中,我选择了 <code>MyCustomUIViewProxy</code>。 Xamarin 工作室将为您创建两个文件:MyCustomUIViewProxy.cs 和 MyCustomUIViewProxy2.designer.cs。请注意,在 Designer.cs 文件中,Xamarin 自动 <code>Register</code>ed 您的代理类。</p>

<p>3) 现在我们要做的就是使用继承,让代理像原来一样:在 MyCustomUIViewProxy.cs 中,我们将基类从 <code>UIView</code> 更改为 <code>MyCustomUIView</code>,我们可以开始了:</p>

<pre><code>partial class MyCustomUIViewProxy : MyCustomUIView
{
    public MyCustomUIViewProxy (IntPtr handle) : base (handle)
    {
    }
}
</code></pre>

<p>就是这样:</p>

<p> <a href="/image/VJV3O.png" rel="noreferrer noopener nofollow"><img src="/image/VJV3O.png" alt="enter image description here"/></a> </p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 如何在 Interface Builder 文件中使用自定义 iOSView (位于引用的类库中)?,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/31720764/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/31720764/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 如何在 Interface Builder 文件中使用自定义 iOS View (位于引用的类库中)?