在Apple的「可可的令牌字段編程指南」中的「基本與委託的交互」一節中指出,當用戶在令牌字段中鍵入一些文本時,委託收到消息tokenField:completionsForSubstring:indexOfToken:indexOfSelectedItem:
。NSTokenField代理
而當用戶鍵入標記字符時,代表接收到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;
}
而且還有一個日誌,當我在令牌字段中鍵入「馬克西姆」,然後刪除它:
2011-03-01 19 :03:01.286 Aurum [23269:a0f] representObjectForEditingString:m Aurod [23269:a0f] representObjectForEditingString:m
2011-03-01 19:03:01.493 Aurum [23269: a0f] completionsForSubstring:m
2011-03-01 19:03:01.633奧羅[23269:A0F] representedObjectForEditingString:毫安
2011-03-01 19:03:01.633奧羅[23269:A0F] representedObjectForEditingString:毫安
2011-03-01 19 :03:01.637 Aurum [23269:a0f] completionsForSubstring:ma
2011-03-01 19:03:03.737 Aurum [23269:a0f] representObjectForEditingString:mak
2011-03-01 19:03:03.737 Aurum [23269: A0F] representedObjectForEditingString:MAK
2011-03-01 19:03:03.741奧羅[23269:A0F] completionsForSubstring:MAK
2011-03-01 19:03:05.089奧羅[23269:A0F] representedObjectForEditingString:MAKS
2011-03-01 19:03:05.089 Aurum [23269:a0f] representObjectForEditingString:maks
2011-03-01 19:03:05.094 Aurum [23269:a0f] completionsForSubstring:maks
2011-03-01 19: 03:05.841 Aurum [23269:a0f] representObjectForEditingString:maksi
2011-03-01 19:03:05.841 Aurum [23269:a0f] representObjectForEditingString:maksi
2011-03-01 19:03:05.845 Aurum [23269:a0f ] completionsForSubstring:maksi
2011-03-01 19:03:06.697奧羅[23269:A0F] representedObjectForEditingString:馬克西姆
2011-03-01 19:03:06.697奧羅[23269:A0F] representedObjectForEditingString:馬克西姆
2011- 03-01 19:03:06.701 Aurum [23269:a0f] completionsForSubstring:maksim
2011-03-01 19:03:12.353 Aurum [23269:a0f] representObjectForEditingString:maksi
2011-03-01 19:03:12.354 Aurum [23269 :A0F] representedObjectForEditingString:maksi
2011-03-01 19:03:12.853奧羅[23269:A0F] representedObjectForEditingString:MAKS
2011-03-01 19:03:12.854奧羅[23269:A0F] representedObjectForEditingString:MAKS
2011-03-01 19:03:12.936 Aurum [23269:a0f] representObjectForEditingString:mak
2011-03-01 19:03:12.937 Aurum [23269:a0f] representObjectForEditingString:mak
2011-03-01 19:03 :13.020 Aurum [23269:a0f] representObjectForEditingString:ma
2011-03-01 19:03:13。020 Aurum [23269:a0f] representObjectForEditingString:ma
2011-03-01 19:03:13.103 Aurum [23269:a0f] representObjectForEditingString:m
2011-03-01 19:03:13.104 Aurum [23269:a0f] representObjectForEditingString :m
所以任何人都可以解釋我出了什麼問題,爲什麼令牌字段表現得如此陌生?
我在您發佈的日誌中沒有看到任何奇怪的東西。你期望'NSTokenField'做什麼? – Yuji 2011-03-02 12:49:40
我希望當我輸入任何符號時,NSTokenField會發送completionsForSubstring:消息來刪除它。只有在我輸入一個tokynized字符後,它纔會發送representObjectForEditingString:消息,只有一次但不是兩次。 – Maksim 2011-03-02 13:05:47