UITextVIew secureTextEntry无法正常工作

时间:2017-01-03 09:58:21

标签: ios objective-c uitextfield uitextview

可能重复Here& here(但他们没有解决我的问题)

我正在创建一个聊天用户界面,其中我的文本框必须同时具有多行功能和安全文本输入功能。

UITextField没有多行功能

UITextView没有安全文本输入功能

我现在该怎么办?

  

另一个疑问,如果UITextView的secureTextEntry无法正常工作,为什么他们将该属性放在UITextView类中

3 个答案:

答案 0 :(得分:2)

  

只有UITextField支持secureTextEntry,制作完全由星号组成的字体,并在选择安全选项后在文本视图中使用它。另外一定要禁用复制。

View this link for better understanding

答案 1 :(得分:1)

你可以使用hack。您可以使用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;
}

您可以使用任何内容代替*来获取安全文本。

答案 2 :(得分:0)

我通过继承UITextView并添加一些类似于Pushkraj添加的属性来使其工作。它在很多情况下都可以完美运行(至少在撰写本文时……)。

我的完整答案是here