在Apple的“Cocoa令牌字段编程指南”中,“与代表的基本交互”一节告诉我们,当用户在令牌字段中键入一些文本时,委托将接收到tokenField:completionsForSubstring:indexOfToken:indexOfSelectedItem:消息。
当用户输入标记字符委托时,接收tokenField:representedObjectForEditingString:消息。
所以当我实现这个方法时,它的行为方式完全不同。
我实现了委托方法:
- (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
所以谁能解释我出了什么问题,为什么令牌场表现得如此奇怪?
发布于 2011-03-09 19:54:34
我只是试图复制和粘贴您的代码。我得到了:
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 (毕竟,您能够逐个字符地删除它)。
https://stackoverflow.com/questions/5163918
复制相似问题