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]