带混合标记/字符串输入的NSTokenField,可能吗?
当邮件的NSTokenField一所送的这个输入无效的电子邮件(一混合令牌和纯字符串值):带混合标记/字符串输入的NSTokenField,可能吗?
有没有做到这一点任何推荐的方法是什么?
NSTokenField是甚么合适的工具吗?或者我会滥用它?
在这个特殊的项目,我需要让用户输入一个文件名模式
(还有其他几个用例虽然),与预定义的令牌支持。
现在我需要输入到输入这样的:
Glue Text %[Tag]Other Glue Text%[Another Tag]More Text
我想改变这一些像这样的防呆图形解决方案:
NSTokenField总是(!)将输入的文本转换为令牌。
要么我在我的网络搜索中使用了错误的关键字,
或者我真的第一个需要这种(混合)行为?!
我确实通过苹果的NSTokenField指南阅读,但无法找到任何有关我的问题的信息。
您需要实施代理方法tokenField:styleForRepresentedObject:
才能为标记返回NSRoundedTokenStyle
或为其他文本返回NSPlainTextTokenStyle
。标记的表示对象是标记字符串本身,除非您的委托返回其他对象。
这应该做的伎俩为您的情况:
- (NSTokenStyle)tokenField:(NSTokenField *)tokenField
styleForRepresentedObject:(id)representedObject
{
if ([representedObject rangeOfString: @"%["].location == 0) {
return NSRoundedTokenStyle;
} else {
return NSPlainTextTokenStyle;
}
}
其实,你首先要确定一个符号化人物,而你的情况是%
[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]。
如果有人解决了上述问题,我很乐意阅读。
您需要实现委托方法 - (BOOL)tokenField:(NSTokenField *)tokenField writeRepresentedObjects:(NSArray *)objects toPasteboard:(NSPasteboard *)pboard – Pol 2014-02-18 23:35:23
谢谢,就是这样! – Regexident 2010-11-23 14:32:00