UITextField中带有SecureTextEntry的符号大小在使用自定义字体时更改大小作为焦点开关怎么实现?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (5)
  • 关注 (0)
  • 查看 (139)

我有一个UITextField这是使用Museo Sans四舍五入的300字体。对于普通的UITextField,一切正常工作,但是当设置secureTextEntry = YES,当UITextField获得并失去焦点时,bullet的大小发生了令人不安的变化。

UITextField有焦点,bullet似乎使用的是自定义字体,但一旦失去焦点,他们就会变成这些更大(标准大小)的bullet。

提问于
用户回答回答于

所以,我找到的唯一解决这个问题的方法就是用textFieldDidBeginEditingtextFieldDidEndEditing委托方法,跟踪文本字段中输入的内容,将其替换为符号掩码,并禁用secureTextEntry所以,当他们离开战场时,他们实际上只是看到了正确的bullet数,而不是他们的安全文本。

用户回答回答于

只需创建一个方法,该方法在每次选择“显示/隐藏密码切换”时都会被调用。在该方法中,将字体设置为零,然后将字体设置为自定义字体和字体大小。应该设置自定义字体和大小的viewWill工程化方法以及。在这个方法中,你要重新设置它。

这样,你就不需要禁用secureTextEntry(这可能使您的文本字段易受攻击)你不需要用textFieldDidBeginEditingtextFieldDidEndEditing...

代码示例:

//if the password is obscured and the toggle to show it has been turned on, display password.  Else, obscure it.
- (IBAction)togglePasswordVisibility:(id)sender {
    //  Xcode contains a bug where the font changes to default font if these two lines of code are not included.
    self.passwordInputTextField.font = nil;
    self.passwordInputTextField.font = [UIFont fontWithName:@"myCustomFontName" size:myDesiredFontSize];  //set this in viewWillAppear as well!

    if (self.passwordInputTextField.secureTextEntry == YES) {
        self.passwordInputTextField.secureTextEntry = NO;
        [self.showHideButton setTitle:@"HIDE" forState:UIControlStateNormal];
    } else {
        self.passwordInputTextField.secureTextEntry = YES;
        [self.showHideButton setTitle:@"SHOW" forState:UIControlStateNormal];
    }
}
用户回答回答于
#pragma mark -- UITextFieldDelegate

- (void)textFieldDidBeginEditing:(UCSSafeTF *)safeTF{

    safeTF.font = [UIFont fontWithName:@"Helvetica" size:14];
}

- (void)textFieldDidEndEditing:(UCSSafeTF *)safeTF{

    safeTF.font = [UIFont fontWithName:@"Helvetica" size:14];
}

现在我这样写,结果是可以的。那么,你看到bullet大小从小变大的原因是非常清楚的,因为下面的苹果iOS 10帮助我们调整了自定义字体的大小。

用户回答回答于

另一个解决办法是:

虽然这是一个iOS缺陷(我应该补充一下,这是iOS 7中的新问题),但我确实有其他方法可以解决它,这是人们可能会认为可以接受的。该功能仍然略有下降,但并没有减少多少。

基本上,只要字段中输入了某些内容,就可以将字体设置为默认的字体系列/样式;但是,如果没有输入任何内容,则将其设置为自定义字体。(字体大小可以单独使用,因为它是家族/样式,而不是大小,这是错误的。)捕捉字段值的每一个变化,并相应地在那个时候设置字体。然后,当不输入任何内容时,微弱的“提示”文本具有您想要的字体(自定义);但是当输入任何内容时(无论是否正在编辑),都将使用默认字体(Helvetica)。

缺点之一是字符在被符号替换之前输入,将使用默认字体(Helvetica)。不过,每个字符只需要一秒。如果这是可以接受的,那么这个解决方案就会奏效。

用户回答回答于

我找到了一个简单的解决办法,而且效果很好。基本上,当你将SecureTextEntry设置为YES时,必须将字体更改为自定义字体。

- (void)textFieldDidBeginEditing:(UITextField *)textField{

    if([textField.text isEqual:@"Password"]){
        textField.text = @"";
        textField.font = [UIFont fontWithName:@"Helvetica" size:14.5];
        textField.secureTextEntry = YES;
    }
}

- (void)textFieldDidEndEditing:(UITextField *)textField{

    if([textField.text isEqual:@""]){
        textField.text = @"Password";
        textField.secureTextEntry = NO;
        textField.font = [UIFont fontWithName:@"YourFont" size:14.5];
    }
}

所属标签

可能回答问题的人

  • 西风

    renzha.net · 站长 (已认证)

    7 粉丝1 提问9 回答
  • 四无君

    0 粉丝0 提问3 回答
  • o o

    3 粉丝491 提问2 回答
  • Dingda

    Dingda · 站长 (已认证)

    4 粉丝0 提问2 回答

扫码关注云+社区

领取腾讯云代金券