2017-01-03 6 views
3

Возможных Дубликатов Here & here (Но они не имеют решения моей проблемы)UITextView secureTextEntry не работает

Я создаю чат UI, где мое текстовое поле должно иметь как Multiple Line функции и Secure Ввода текст Функция.

UITextField не Многолинейность Характеристика

UITextView не Secure ввода текста Функция

Что я должен делать?

Другое сомнение, если secureTextEntry для UITextView не будет работать, почему, черт возьми, они положили эту собственность в UITextView класса

+0

Прочитайте мой вопрос – Ganesh

+0

Я создаю чат приложения. Я хочу, чтобы он имел несколько вариантов линии (как в whatsapp). В некоторых случаях мне также может понадобиться опция принудительного ввода текста. – Ganesh

+0

, то используйте 'UITextView' и всякий раз, когда пользователь запускает защищенный текст, тогда отобразите' * 'в пользовательском интерфейсе вместо исходного символа, а в бэкэнд сохраните каждого персонажа правильно, это единственный подход, который я считаю возможным. –

ответ

0

Вы можете использовать хак для него. Вы можете использовать предопределенный метод delegate от UITextView и который равен textViewDidChange Таким образом, поддерживайте один флаг, который сохранит состояние, хотите ли вы получить защищенную запись или нет. например,

NSString *originalText = @""; 
BOOL isSecuredEntryOn = false; 

Изменить его true всякий раз, когда вы хотите добавить обеспеченному текст как BOOL isSecuredEntryOn = true;

Теперь это будет код вашего метода delegate:

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text { 
    originalText = [originalText stringByAppendingString:text]; 
    return YES; 
} 

- (void)textViewDidChange:(UITextView *)textView { 
    NSString *enteredText = textView.text; 
    textView.text = (isSecuredEntryOn) ? [enteredText stringByReplacingOccurrencesOfString:enteredText withString:[self getSecuredTextFor:enteredText]] : enteredText; 
} 

-(NSString *)getSecuredTextFor:(NSString *)stringToConvert { 
    NSString *securedString = @""; 
    for (int i = 0; i < stringToConvert.length; i++) { 
     securedString = [securedString stringByAppendingString:@"*"]; 
    } 
    return securedString; 
} 

Вы можете использовать что-нибудь вместо * для защищенного текста.

+0

Но где я могу получить исходный текст? Когда textViewChange называется второй раз, мой исходный текст будет заменен звездочкой. Следовательно, я могу получить только astriks – Ganesh

+0

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

+0

Скажите, если я собираюсь ввести '1234'. Когда я набираю '1', originalText будет содержать '1'. Когда я набираю '2', то originalText будет иметь '* 2'. Поэтому я не могу сохранить свой исходный текст, если каждый раз его извлекать из textView.text. – Ganesh

2

Только UITextField поддерживает secureTextEntry, создавая шрифт, который целиком состоит из звездочек и использует его в текстовом режиме после выбора защищенной опции. Также обязательно отключите копирование.

View this link for better understanding

+0

вы не можете заменить такие компоненты – Ganesh

+0

@Ganesh отклонил бы это яблоко? пожалуйста, обновите меня, спасибо –

+1

Эффект будет затронут. Мне нужен эффективный способ. – Ganesh