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

Xamarin 子类的designer.cs类型中自动生成的插座,xamarin,xamarin-studio,xamarin.mac,Xamarin,Xamarin Studio,Xamarin.mac,我想知道Xamarin Studio是否可以将自动生成的插座的类型(例如,myview.designer.cs中)设置为.xib中控件的子机箱 例如,我将NSButton子类化,为整个应用程序中的按钮创建一些自定义UI 我使用Register属性将我的类定义为这样的类型,以便Objective-C运行时可以看到它: [Register("AppButton")] public class AppButton : NSButton { ... } 在XCode中,我在我的NSButton

我想知道Xamarin Studio是否可以将自动生成的插座的类型(例如,
myview.designer.cs
中)设置为
.xib
中控件的子机箱

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

我使用
Register
属性将我的类定义为这样的类型,以便Objective-C运行时可以看到它:

[Register("AppButton")]
public class AppButton : NSButton
{
    ...
}
在XCode中,我在我的
NSButton
s中将自定义类设置为
AppButton
。如果在文本编辑器中打开
.xib
,我可以在按钮上看到
customClass
属性:

但是,当Xamarin Studio听取了更改并更新了designer文件时,我似乎总是用一种
NSButton
而不是
AppButton
来获得出口

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

    ...
}
我希望它是我的自定义类的类型:

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

    ...
}
这样做的主要原因是我想在
AwakeFromNib
中设置一些属性,而每次强制转换它都有点繁琐。如果类型发生更改,编译器抛出一个错误,而不是运行时错误,这也很好,假设我没有检查它是否真的是
AppButton
的类型

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

    ...
}
如果我可以在XCode中直接在我的子类上设置属性,这就不会是一个问题。但据我所知,.

我是通过以下方式实现的:

  • 创建如下所示的子类
  • 先建Xamarin工作室
  • 打开xcode检查
    CustomButton.h
    CustomButton.m
    文件
  • 在xcode中设置类类型,它应显示在下拉列表中:
  • 再次创建门店。应该是这样的:

    [Outlet]
    AppName.iOS.CustomButton customButton { get; set; }
    
我想你是指
ui按钮
而不是
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
    }
}

你的方法有效。我认为关键的区别在于您在设置自定义类之后创建了outlet。如果先创建插座,然后设置自定义类,则它仍将在
designer.cs
中使用类型
NSButton
,而不是
AppButton
。所以我猜问题是Xamarin Studio没有检测到类型已更改。至少在v5.10.3中,我似乎就是这样。我仍然不喜欢自定义类可以更改,并且类型不会在
designer.cs
中更改的想法。我们将Cocoa用于OS X应用程序,而不是Cocoa Touch,因此我们使用的是
NSButton
s。啊,很抱歉没有做太多,OSX开发人员认为这是一个打字错误。是的,当我在测试它时,它只能按那个顺序工作,不太好,在插座设置好后不接受更改,可能会提交一个bug。