NSTokenField делегат - PullRequest
       18

NSTokenField делегат

1 голос
/ 02 марта 2011

В Apple в «Руководстве по программированию поля токенов для какао» в разделе «Основы взаимодействия с делегатом» говорится, что при вводе пользователем текста в поле токена делегат получает сообщение 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;
}

И есть журнал, когда я набираю "Максим" в поле токена и затем стираю его:

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] завершенийForSubstring: 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] завершений ForSubstring: ma
2011-03-01 19: 03: 03.737 Aurum [23269: a0f] ПредставительObjectForEditingString: mak
2011-03-01 19: 03: 03.737 Aurum [23269: a0f] presentObjectForEditingString: mak
2011-03-01 19: 03: 03.741 Aurum [23269: a0f] завершенийForSubstring: mak
2011-03-01 19: 03: 05.089 Aurum [23269: a0f] presentObjectForEditingString: maks
2011-03-01 19: 03: 05.089 Aurum [23269: a0f] представленоObjectForEditingString: maks
2011-03-01 19: 03: 05.094 Aurum [23269: a0f] завершения ForSubstring: maks
2011-03-0119: 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] завершений ForSubstring: maksi
2011-03-01 19: 03: 06.697 Aurum [23269: a0f] ПредставительObjectForEditingString: maksim
2011-03-01 19: 03: 06.697 Aurum [23269: a0f] представляетсяObjectForEditingString: Максим
2011-03-01 19: 03: 06.701 Aurum [23269: a0f] завершает ForSubstring: максим
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: maks
2011-03-01 19: 03: 12.854 Aurum [23269: a0f] представленоObjectForDiting: maks
2011-03-01 19: 03: 12.936 Aurum [23269: a0f] представленоObjectForEditingString: mak
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

Так может кто-нибудь объяснить мне, что происходитнеправильно и почему токен fНеужели так странно себя вести?

1 Ответ

1 голос
/ 09 марта 2011

Я просто попытался воспроизвести это, скопировав и вставив ваш код. Я получил:

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? Когда вы ударяете токенизирующего персонажа, он не похож на токенизированный максим (так как в конце концов вы смогли удалить его символ за символом).

...