带混合标记/字符串输入的NSTokenField,可能吗?

问题描述:

当邮件的NSTokenField一所送的这个输入无效的电子邮件(一混合令牌纯字符串值):带混合标记/字符串输入的NSTokenField,可能吗?

alt text

有没有做到这一点任何推荐的方法是什么?
NSTokenField是甚么合适的工具吗?或者我会滥用它?

在这个特殊的项目,我需要让用户输入一个文件名模式
(还有其他几个用例虽然),与预定义的令牌支持。

现在我需要输入到输入这样的:

Glue Text %[Tag]Other Glue Text%[Another Tag]More Text 

我想改变这一些像这样的防呆图形解决方案: alt text

NSTokenField总是(!)将输入的文本转换为令牌。

要么我在我的网络搜索中使用了错误的关键字,
或者我真的第一个需要这种(混合)行为?!

我确实通过苹果的NSTokenField指南阅读,但无法找到任何有关我的问题的信息。

您需要实施代理方法tokenField:styleForRepresentedObject:才能为标记返回NSRoundedTokenStyle或为其他文本返回NSPlainTextTokenStyle。标记的表示对象是标记字符串本身,除非您的委托返回其他对象。

这应该做的伎俩为您的情况:

- (NSTokenStyle)tokenField:(NSTokenField *)tokenField 
styleForRepresentedObject:(id)representedObject 
{ 
    if ([representedObject rangeOfString: @"%["].location == 0) { 
     return NSRoundedTokenStyle; 
    } else { 
     return NSPlainTextTokenStyle; 
    } 
} 
+0

谢谢,就是这样! – Regexident 2010-11-23 14:32:00

其实,你首先要确定一个符号化人物,而你的情况是%

[tokenField setTokenizingCharacterSet:[NSCharacterSet characterSetWithCharactersInString:@"%%"]]; 

输入字符串需要改好了到:

胶文本%[标签]%其他胶水 文本%[另一标签]%其他文本

......这样Cocoa知道令牌的结束位置。

如果你想[标签]在令牌字段显示为标签,你也需要实现tokenField:displayStringForRepresentedObject:方法:或者,如果你只复制:

- (NSTokenStyle)tokenField:(NSTokenField *)tokenField 
displayStringForRepresentedObject:(id)representedObject 
{ 
    if ([representedObject rangeOfString: @"["].location == 0) { 
     return [(NSString*)representedObject substringWithRange:NSMakeRange(1, [(NSString*)representedObject length]-2)]; 

    return representedObject; 
} 

但是,这有一个很大的缺点移动令牌,Cocoa将调用tokenField:displayStringForRepresentedObject:,复制/移动的令牌将更改为常规文本标记,而不是令牌[Tag]。

如果有人解决了上述问题,我很乐意阅读。

+0

您需要实现委托方法 - (BOOL)tokenField:(NSTokenField *)tokenField writeRepresentedObjects:(NSArray *)objects toPasteboard:(NSPasteboard *)pboard – Pol 2014-02-18 23:35:23