Xamarin 子类的designer.cs类型中自动生成的插座
我想知道Xamarin Studio是否可以将自动生成的插座的类型(例如,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
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。