在 Apple 的“Token Field Programming Guide for 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;
}
当我在令牌字段中键入“maksim”然后删除它时,会出现一个日志:
2011-03-01 19:03:01.286 Aurum[23269:a0f] 代表ObjectForEditingString:m
2011-03-01 19:03:01.287 Aurum[23269:a0f] 代表ObjectForEditingString:m
2011-03-01 19:03:01.493 Aurum[ 23269:a0f] completionsForSubstring: m
2011-03-01 19:03:01.633 Aurum[23269:a0f]代表ObjectForEditingString: ma
2011-03-01 19:03:01.633 Aurum[23269:a0f] 代表ObjectForEditingString: ma
2011-03-01 19:03:01.637 Aurum[23269:a0f] completionsForSubstring: ma
2011-03-01 19:03:03.737 Aurum[23269:a0f] 代表ObjectForEditingString: mak
2011-03-01 19:03:03.737 Aurum[23269:a0f] 代表ObjectForEditingString : mak
2011-03-01 19:03:03.741 Aurum[23269:a0f] completionsForSubstring: mak
2011-03-01 19:03:05.089 Aurum[23269:a0f] 代表ObjectForEditingString:制作
2011-03-01 19:03:05.089 Aurum[23269:a0f] 代表ObjectForEditingString:制作
2011-03-01 19:03:05.094 Aurum[ 23269:a0f] completionsForSubstring: maks
2011-03-01 19:03:05.841 Aurum [23269:a0f]代表ObjectForEditingString: maksi
2011-03-01 19:03:05.841 Aurum [23269:a0f]代表ObjectForEditingString: maksi
2011-03-01 19:03:05.845 Aurum[23269:a0f] completionsForSubstring: maksi
2011-03-01 19:03:06.697 Aurum[23269:a0f]代表ObjectForEditingString: maksim
2011-03-01 19:03:06.697 Aurum[23269:a0f]代表ObjectForEditingString : maksim
2011-03-01 19:03:06.701 Aurum [23269:a0f] 完成子字符串: maksim
2011-03-01 19:03:12.353 Aurum[23269:a0f] 代表ObjectForEditingString: maksi
2011-03-01 19:03:12.354 Aurum[23269:a0f] 代表ObjectForEditingString: maksi
2011-03-01 19:03:12.853 Aurum[ 23269:a0f]代表ObjectForEditingString:制作
2011-03-01 19:03:12.854 Aurum [23269:a0f]代表ObjectForEditingString:制作
2011-03-01 19:03:12.936 Aurum [23269:a0f]代表ObjectForEditingString:制作
2011-03-01 19:03:12.937 Aurum[23269:a0f]代表ObjectForEditingString:mak
2011-03-01 19:03:13.020 Aurum[23269:a0f]代表ObjectForEditingString:ma
2011-03-01 19:03:13.020 Aurum[23269:a0f]代表ObjectForEditingString : ma
2011-03-01 19:03:13.103 Aurum[23269:a0f] 代表ObjectForEditingString: m
2011-03-01 19:03:13.104 Aurum [23269:a0f] 代表ObjectForEditingString:m
那么谁能解释我出了什么问题以及为什么令牌字段表现得如此奇怪?