designer.cs 类型子类中的自动生成插座

Autogenerated outlet in designer.cs type of subclass

我想知道 Xamarin Studio 是否可以将 myview.designer.cs 中自动生成的插座类型设置为 .xib.[=30= 中控件的子类]

例如,我已子classed NSButton 为整个应用程序中的按钮创建一些自定义 UI。

我使用 Register 属性将我的 class 定义为这样的东西,因此它对 Objective-C 运行时可见:

[Register("AppButton")]
public class AppButton : NSButton
{
    ...
}

在 XCode 内,然后我在 NSButton 上将自定义 class 设置为 AppButton。如果我在文本编辑器中打开 .xib,我可以在我的按钮上看到 customClass 属性:

<button id="bxh-qr-g81" ... customClass="AppButton">

但是当 Xamarin Studio 侦听更改并更新设计器文件时,我似乎总是得到类型为 NSButton 而不是 AppButton 的插座。

[Register ("MyView")]
partial class MyView
{
    [Outlet]
    AppKit.NSButton MyButton { get; set; }

    ...
}

我希望它成为我的自定义类型 class:

[Register ("MyView")]
partial class MyView
{
    [Outlet]
    AppButton MyButton { get; set; }

    ...
}

主要是因为我想在AwakeFromNib内设置一些属性,每次都强制转换有点繁琐。假设我不检查它确实是 AppButton.

的类型,如果类型发生变化,编译器抛出错误而不是运行时错误也会很好

如果我可以在 XCode 内直接在我的子 class 上设置属性,这将不是问题。但据我所知,.

我通过以下方式实现了它:

  • 创建子class 如下所示
  • 首先构建 Xamarin 工作室
  • 正在打开 xcode 检查 CustomButton.hCustomButton.m 文件
  • 在 xcode 中设置 class 类型,它应该出现在下拉列表中:
  • 再次创建网点。然后应该看起来像这样:

    [Outlet]
    AppName.iOS.CustomButton customButton { get; set; }
    

我想你的意思是 UIButton 也不是 NSButton

using System;
using UIKit;
using Foundation;

namespace EdFringe.iOS
{
    [Register ("CustomButton")]
    public class CustomButton : UIButton
    {
        public CustomButton ()
        {
        }

        public CustomButton (IntPtr p) : base(p)
        {
            //this one i think is used to create the obj-c object.
        }

        public CustomButton (NSCoder coder) : base(coder)
        {
            // This one i think is used when creating the xib.
        }

        //Custom stuff here
    }
}