首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >删除NSTokenFieldCell的回调

删除NSTokenFieldCell的回调
EN

Stack Overflow用户
提问于 2010-12-05 14:07:11
回答 2查看 1.1K关注 0票数 0

我有一个包含NSTokenFieldCell的NSTokenField,用于表示托管对象。当我通过输入创建一个新的NSTokenFieldCell时,我的NSTokenField的委托(一个NSArrayController)被这个方法回调:

代码语言:javascript
复制
tokenField:representedObjectForEditingString

在此方法中,我为新的标记单元格创建了一个托管对象,它按预期工作。

但是,我找不到一个用于删除NSTokenFieldCell的回调方法,在该方法中我可以删除我的托管对象。有人知道这是否存在吗?如果不是,我想我将不得不以某种方式监视NSTokenField的删除,这听起来不太理想。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-12-06 05:33:03

很难理解你到底想要什么。你是说你在创建和删除NSTokenFieldCells吗?我不这么认为-- NSTokenField控件有一个NSTokenFieldCell实例。整个程序集只是将某些字符串(通过NSTokenFieldDelegate协议控制)表示为图形“令牌”。不是每次都重新创建单元格,而是只重新创建它表示/绘制的内容。

你的意思是说,当一个标记化的字符串从字段中删除时,你希望得到通知?如果是这样的话,恐怕这不是它设计的工作方式。您可以决定将哪些字符串(由您告诉token字段使用的标记化字符集分隔)以及哪些替换字符串(通常是缩短或清理后的版本)显示为令牌本身。因此,由您决定模型中的"token“现在是否丢失,并自行清理。

简单地说:在Cocoa绑定中没有这样做的工具。最好维护一个"-tokensNeedCleaning“标志,并以-setNeedsDisplay:和-displayIfNeeded方法处理NSView的方式对待它。这样,当token字段被编辑时,您可以调用self setTokensNeedCleaning:YES。反过来,该方法可以通过-performSelector:withObject:afterDelay:调用"self cleanTokensIfNeeded“(延迟为零秒),以便在needsCleaning标志为YES的情况下调度清除丢失的令牌。然后,它将取消设置该标志。

这个简单的机制使清理例程不会在每次后续编辑时运行,而是标记它,并安排它在不久的将来运行(如果仍然需要)。这样,对-cleanTokensIfNeeded的连续调度调用将不会盲目地尝试清理-清理调用将被合并。

票数 1
EN

Stack Overflow用户

发布于 2012-03-02 04:28:25

我刚刚在另一个话题中回答了这个问题,那个话题似乎已经死了,所以我在这里回答:

您应该能够通过创建一个令牌包装器类来模拟delete委托,该类具有指向所有者的指针以及包装的对象:

代码语言:javascript
复制
@protocol TokenWrapperDelegate 
-(void)tokenWasDeleted:(id)token;
@end

@interface TokenWrapper : NSObject {
  id<TokenWrapperDelegate> owner;
  id token;
}
-(id)initWithWrappedToken:(id)token owner:(id<TokenWrapperDelegate>)owner;
@property (nonatomic, weak) id<TokenWrapperDelegate> owner;
@property (nonatomic, strong) id token;
@end

然后让TokenWrapper取消分配通知所有者该令牌已被删除:

代码语言:javascript
复制
@implementation TokenWrapper

...

-(void)dealloc {
  [owner tokenWasDeleted:self.token];
  self.token = nil;
  [super dealloc];
}

@end

然后在您的representedObjectForEditingString回调中,返回一个自动释放的包装器,指向您的所有者和您的真实令牌。您还必须确保更改其他NSTokenField委托回调以深入研究包装器对象。确保所有者在手动更改NSTokenField的内容(如通过调用setObjectValue)时忽略这些回调。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4357624

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档