2013-03-15 4 views
1

У меня есть NSTokenFiled, который проверяет вставленные маркеры через метод делегата -tokenField:shouldAddObjects:atIndex:. К сожалению, этот метод вызывается только тогда, когда пользователь нажимает символ токенизации. Когда он/она щелкает за пределами элемента управления, нажимает esc или tab, незавершенная строка автоматически преобразуется в токен, не вызывая метод проверки.Удалить символы токенов из NSString

После запроса google я заметил, что проблема известна, и кто-то из stackoverflow предложил переопределить метод делегирования для проверки оставшейся строки.

К сожалению, объект, переданный этому методу, является NSMutableString с невидимым символом для каждого токена, который уже был вставлен в поле маркера. Наверное, это то, как какао отслеживает, где показывать маркеры.

Мой вопрос: как я могу удалить эти незаконные символы?

До сих пор я попытался это:

NSString *newString = [NSString stringWithUTF8String:[stringWithInvisibleCharcters UTF8String]]; 

NSString *newString = [stringWithInvisibleCharacters stringByTrimmingCharactersInSet:[NSCharacterSet illegalCharacterSet]]; 

NSString *newString = [stringWithInvisibleCharacters stringByTrimmingCharactersInSet:[NSCharacterSet controlCharacterSet]]; 

без успеха. Я знаю, что последние два будут работать только в том случае, когда символы токенов находятся в начале и в конце, но это мой случай.

Edit:

Если это помогает регистрируя символы с

NSLog(@"%hu",[(NSMutableString *)object characterAtIndex:0]); 

возвращается 65532.

+0

Что означают недопустимые символы /? –

ответ

10

характер, связанный с 65532 известен как "Объект Replacement Character" , который, как представляется, выходит за пределы диапазона Unicode, который NSCharacterSet обрабатывает с помощью своих геттеров. Как вы сказали, NSTokenField использует его как разделитель между токенами. Что-то вроде этого, чтобы избавиться от него, должно работать нормально:

NSCharacterSet *characterset=[NSCharacterSet characterSetWithCharactersInString:@"\uFFFC"]; 
NSString *newString = [str stringByTrimmingCharactersInSet:characterset]; 
+0

Спасибо, что отлично! – Jacopo

3
NSString *str; 
NSCharacterSet *characterset=[NSCharacterSet characterSetWithCharactersInString:@"<>"]; 
str = [str1 stringByTrimmingCharactersInSet:characterset];` 
Смежные вопросы