我正在尝试使用扩展UITextField的自定义控件,以便在激活文本字段时隐藏选择插入符号。文本字段有一个选择器作为其输入视图,因此当选择器处于活动状态时,我不希望文本字段中的闪烁光标。我最终会向自定义控件添加类似于公开图标的内容,但是现在我只是想隐藏光标。我得到了这个解决方案here。
我的应用程序正在抛出一个异常,但是:从目标c调用了一个已经过GC 的TestCustomControl.PickerTextField(0xC8BC970)类型的托管对象。
如果我将自定义字段更改回UITextField,则不会收到错误。
这是我的自定义类:
using System.Drawing;
using MonoTouch.Foundation;
using MonoTouch.UIKit;
namespace TestCustomControl
{
[Register("PickerTextField")]
public class PickerTextField : UITextField
{
public override RectangleF GetCaretRectForPosition (UITextPosition position)
{
return RectangleF.Empty;
}
}
}
我已经将我的Outlet设为UITextField和PickerTextField,我尝试在我的PC上运行VS 2012,在Mac上运行Xamarin Studio 4.0.8(版本2)。在所有情况下,如果在XCode中我将字段设置为UITextField它工作正常(但我得到一个闪烁的光标),如果我将它设置为PickerTextField,我得到 GC 异常。
我可以在某个地方发布整个项目的代码,如果它有用(它只是一个ViewController和View,自定义控件类,我的选择器的模型,XIB文件,以及为其创建的其他文件)一个新项目)。
答案 0 :(得分:1)
你错过了IntPtr
构造函数。如果从XIB创建实例,则需要这样做。添加默认的c'tor也是个好主意:
[Register("PickerTextField")]
public class PickerTextField : UITextField
{
public PickerTextField(IntPtr handle) : base(handle)
{}
public PickerTextField() : base()
{}
public override RectangleF GetCaretRectForPosition (UITextPosition position)
{
return RectangleF.Empty;
}
}
这很有趣,因为当我开始使用MonoTouch时,我实际上也问了同样的问题:How to use custom UIView subclass in XIB editor with Monotouch?