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

时间:2015-10-20 08:28:40

标签: xamarin xamarin-studio xamarin.mac

我想知道Xamarin Studio是否有可能将myview.designer.cs中自动生成的插座的类型设置为.xib内控件的子掌。

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

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

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

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

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

但是当Xamarin Studio听取了更改并更新了设计器文件时,我似乎总是使用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的类型。

如果我可以在XCode中直接在我的子类上设置属性,那么这不是问题。但据我所知,IBInspectable or IBDesignable doesn't seem to be supported by Xamarin

1 个答案:

答案 0 :(得分:0)

我让这个工作:

  • 创建如下的子类
  • 首先建立Xamarin工作室
  • 打开CustomButton.hCustomButton.m文件
  • 的xcode检查
  • 在xcode中设置类型,它应该出现在下拉列表中: enter image description here
  • 再次创建出口。应该是这样的:

    [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
    }
}