首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSTokenField委托

NSTokenField委托
EN

Stack Overflow用户
提问于 2011-03-02 05:53:44
回答 1查看 1K关注 0票数 1

在Apple的“Cocoa令牌字段编程指南”中,“与代表的基本交互”一节告诉我们,当用户在令牌字段中键入一些文本时,委托将接收到tokenField:completionsForSubstring:indexOfToken:indexOfSelectedItem:消息。

当用户输入标记字符委托时,接收tokenField:representedObjectForEditingString:消息。

所以当我实现这个方法时,它的行为方式完全不同。

我实现了委托方法:

代码语言:javascript
复制
- (NSArray *)tokenField:(NSTokenField *)tokenFieldArg
completionsForSubstring:(NSString *)substring 
           indexOfToken:(NSInteger)tokenIndex 
    indexOfSelectedItem:(NSInteger *)selectedIndex {

NSLog(@"completionsForSubstring: %@", substring);
return [NSArray array];
}    

- (id)tokenField:(NSTokenField *)tokenField
 representedObjectForEditingString:(NSString *)editingString {

NSLog(@"representedObjectForEditingString: %@", editingString);
return editingString;
}

当我在token字段中输入"maksim“,然后删除它时,就会有一个日志:

2011-03-01 19:03:01.286 a0f 23269:a0 f representedObjectForEditingString: m

2011-03-01 19:03:01.287 a0f 23269:a0 f representedObjectForEditingString: M

2011-03-01 19:03:01.493 a0f 23269:a0 f completionsForSubstring: M

2011-03-01 19:03:01.633 a0f 23269:a0 f representedObjectForEditingString: ma

2011-03-01 19:03:01.633 a0f 23269:a0 f representedObjectForEditingString: ma

2011-03-01 19:03:01.637 a0f 23269:a0 f completionsForSubstring: ma

2011-03-01 19:03:03.737 a0f 23269:a0 f representedObjectForEditingString: mak

2011-03-01 19:03:03.737 a0f 23269:a0 f representedObjectForEditingString: mak

2011-03-01 19:03:03.741 a0f 23269:a0 f completionsForSubstring: mak

2011-03-01 19:03:05.089 a0f 23269:a0 f representedObjectForEditingString: maks

2011-03-01 19:03:05.089 a0f 23269:a0 f representedObjectForEditingString: maks

2011-03-01 19:03:05.094 a0f 23269:a0 f completionsForSubstring: maks

2011-03-01 19:03:05.841 a0f 23269:a0 f representedObjectForEditingString: maksi

2011-03-01 19:03:05.841 a0f 23269:a0 f representedObjectForEditingString: maksi

2011-03-01 19:03:05.845 a0f 23269:a0 f completionsForSubstring: maksi

2011-03-01 19:03:06.697 maksim 23269:a0f representedObjectForEditingString: maksim

2011-03-01 19:03:06.697 maksim 23269:a0f representedObjectForEditingString: maksim

2011-03-01 19:03:06.701 maksim 23269:a0f completionsForSubstring: maksim

2011-03-01 19:03:12.353 a0f 23269:a0 f representedObjectForEditingString: maksi

2011-03-01 19:03:12.354 a0f 23269:a0 f representedObjectForEditingString: maksi

2011-03-01 19:03:12.853 a0f 23269:a0 f representedObjectForEditingString: maks

2011-03-01 19:03:12.854 a0f 23269:a0 f representedObjectForEditingString: maks

2011-03-01 19:03:12.936 a0f 23269:a0 f representedObjectForEditingString: mak

2011-03-01 19:03:12.937 a0f 23269:a0 f representedObjectForEditingString: mak

2011-03-01 19:03:13.020 a0f 23269:a0 f representedObjectForEditingString: ma

2011-03-01 19:03:13.020 a0f 23269:a0 f representedObjectForEditingString: ma

2011-03-01 19:03:13.103 a0f 23269:a0 f representedObjectForEditingString: M

2011-03-01 19:03:13.104 a0f 23269:a0 f representedObjectForEditingString: m

所以谁能解释我出了什么问题,为什么令牌场表现得如此奇怪?

EN

回答 1

Stack Overflow用户

发布于 2011-03-09 19:54:34

我只是试图复制和粘贴您的代码。我得到了:

代码语言:javascript
复制
2011-03-09 14:52:48.888 StackOverflowTesting[27789:a0f] completionsForSubstring: m
2011-03-09 14:52:49.242 StackOverflowTesting[27789:a0f] completionsForSubstring: ma
2011-03-09 14:52:49.560 StackOverflowTesting[27789:a0f] completionsForSubstring: mak
2011-03-09 14:52:49.911 StackOverflowTesting[27789:a0f] completionsForSubstring: maks
2011-03-09 14:52:50.017 StackOverflowTesting[27789:a0f] completionsForSubstring: maksi
2011-03-09 14:52:50.217 StackOverflowTesting[27789:a0f] completionsForSubstring: maksim
2011-03-09 14:52:50.647 StackOverflowTesting[27789:a0f] representedObjectForEditingString: maksim

这正是我所期望的输出。您是否更改了NSTokenField的默认标记字符?当您点击标记字符时,它看起来并不像标记maksim (毕竟,您能够逐个字符地删除它)。

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

https://stackoverflow.com/questions/5163918

复制
相关文章

相似问题

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