菜鸟教程小白 发表于 2022-12-13 17:09:29

ios - 我在 MonoTouch 中将 UIButton 子类化,但底层 ObjC 类仍然是 UIButton


                                            <p><p>我有继承 <code>UIButton</code> 的 <code>BackButton</code>。<br/>
它没有 xib,非常简单,并且包含一些我省略的布局逻辑。</p>

<p>我是这样声明的:</p>

<pre><code>
public class BackButton : UIButton
{
    public BackButton (string text, EventHandler handler)
      : base (UIButtonType.Custom)
    {
      TouchUpInside += handler;
      SetTitle (text, UIControlState.Normal);
    }

    public BackButton(IntPtr handle) : base(handle) { }
}
</code></pre>

<p>如果我在另一个 View 的 xib 中使用 <code>BackButton</code>,它的底层类被视为 <code>BackButton</code>:</p>

<p> <img src="/image/FrA6O.png" alt=""/> </p>

<p>但是,当我从代码创建实例时,底层类只是 <code>UIButton</code>:</p>

<p> <img src="/image/oPB5F.png" alt=""/> </p>

<p>这很令人沮丧,因为我正在尝试 <a href="https://stackoverflow.com/q/12939321/458193" rel="noreferrer noopener nofollow">use UIAppearance</a>对于这个类,我需要它是正确的实例。</p>

<p>有什么问题?</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>事实证明,我必须调用无参数 <code>UIButton</code> 构造函数,而不是我正在调用的构造函数。<br/>
从构造函数定义中删除 <code>: base (UIButtonType.Custom)</code> 足以使其工作:</p>

<pre><code>public BackButton (string text, EventHandler handler)
   // : base (UIButtonType.Custom) -- remove this line
{
    TouchUpInside += handler;
    SetTitle (text, UIControlState.Normal);
}
</code></pre>

<p>事后看来,这是完全有道理的,因为 MonoTouch 提供的 <code>UIButton(UIButtonType)</code> 构造函数实际上调用了 <code></code>:</p>

<pre><code>public UIButton (UIButtonType type) : base (
    Messaging.IntPtr_objc_msgSend_int (UIButton.class_ptr,
      UIButton.selButtonWithType_, (int)type)
    ) { }
</code></pre>

<p>我认为,<code></code> 无法了解我的自定义 View ,因此它只会创建一个 <code>UIButton</code>。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 我在 MonoTouch 中将 UIButton 子类化,但底层 ObjC 类仍然是 UIButton,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/12949554/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/12949554/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 我在 MonoTouch 中将 UIButton 子类化,但底层 ObjC 类仍然是 UIButton