我有一个 NSTokenField 和 NSTokenFieldCell 代表托管对象。当我通过键入创建一个新的 NSTokenFieldCell 时,我的 NSTokenField 的委托(NSArrayController)将使用以下方法回调:
tokenField:representedObjectForEditingString
在此方法中,我为新令牌单元创建一个托管对象,它按预期工作。
但是,我找不到用于删除 NSTokenFieldCell 的回调方法,我可以在其中删除我的托管对象。有人知道这是否存在吗?如果没有,我想我将不得不以某种方式监视 NSTokenField 是否有删除,这听起来不太理想。
很难准确理解您的要求。您真的是在创建和删除 NSTokenFieldCells 吗?我不认为你这样做 - NSTokenField 控件有一个 NSTokenFieldCell 实例。整个程序集仅将某些字符串(您通过 NSTokenFieldDelegate 协议控制)表示为图形“令牌”。单元格不会每次都重新创建,只会重新创建它所代表/绘制的内容。
您的意思是说您希望在以下情况时收到通知:标记化字符串是否从字段中删除?如果是这样,恐怕这不是它设计的工作方式。You决定对哪些字符串(由您告诉令牌字段使用的令牌化字符集分隔)进行令牌化,以及将哪些替换字符串(通常是缩短或清理的版本)显示为令牌本身。因此,取决于you确定模型中的“令牌”现在是否丢失并自行清理。
简而言之:Cocoa Bindings 中没有执行此操作的工具。最好保留一个“-tokensNeedCleaning”标志,并以与 NSView 一起使用 -setNeedsDisplay: 和 -displayIfNeeded 方法相同的方式对待它。这样,当编辑令牌字段时,您可以调用[self setTokensNeedCleaning:YES]。反过来,该方法可以通过 -performSelector:withObject:afterDelay: 调用“[self cleanTokensIfNeeded]”(延迟为零),以在 needCleaning 标志为 YES 时安排清理丢失的令牌。然后它会取消设置标志。
这种简单的机制可以防止清理例程在每次连续编辑时运行,而是标记它并安排它在不久的将来运行(如果仍然需要)。这样,对 -cleanTokensIfNeeded 的连续计划调用将不会继续盲目地尝试清理 - 清理调用将被合并。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)