使用自定义版本的 UITextField 时引发异常
Posted
技术标签:
【中文标题】使用自定义版本的 UITextField 时引发异常【英文标题】:Exception thrown when using a custom version of UITextField 【发布时间】:2013-05-23 18:20:24 【问题描述】:我正在尝试使用扩展 UITextField 的自定义控件,以便在激活文本字段时隐藏选择插入符号。文本字段具有拾取器作为其InputView,因此我在选择器处于活动状态时,我不希望在文本字段中闪烁光标。我最终会在自定义控件中添加类似披露图标的东西,但现在我只是想隐藏光标。我得到了这个解决方案here。
不过,我的应用抛出了一个异常:Selector 从objective-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 文件,以及为一个新项目)。
【问题讨论】:
好点 - 它发生在应用程序启动时。调试器在我的 AppDelegate 中的 window.MakeKeyAndVisible() 上中断。我根据您的建议创建了一个要点,其中包含项目中的所有文件:https://gist.github.com/jfren484/5638688。 【参考方案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?
【讨论】:
是的,成功了!非常感谢。异常中的任何内容都不会向我指出该解决方案。以上是关于使用自定义版本的 UITextField 时引发异常的主要内容,如果未能解决你的问题,请参考以下文章
在自定义 UlTableViewCell 中使用 UITextField 时 resignFirstResponder 崩溃
当我在 SE 中向上滚动时,自定义 UITableViewCell 中的 UItextfield 文本打印为零
打开表情符号键盘时自定义 UITextField 冻结应用程序?
使用 Xcode 7 自定义 UITableViewCell 和 UITextfield
在自定义 UITableCell 中从 UITextField 调用 textFieldShouldReturn 时遇到问题