У меня есть UITextField с настраиваемым шрифтом, все работает нормально до Swift до 1.2 и 2.0. Впоследствии каждый раз, когда я пытаюсь редактировать текстовое поле, он меняет шрифт на другой, который кажется своего рода Times New Roman. У кого-нибудь есть опыт?UiTextField изменяет шрифт при редактировании в Swift 1.2 и 2.0
ответ
У меня был странный случай шрифтов, изменяющих его размер и тип шрифта, когда secureTextEntry для UiTextField был переключен с помощью действия кнопки. Если бы явно управлять шрифт для UITextField, используя следующие строки кода:
password.font = UIFont(name: "systemFont", size: 14)
password.font = UIFont.systemFontOfSize(14)
Полный код, используемый в Show Password Button:
//Function associated with the button for show password option
@IBAction func switchShowPasswordAction(sender: AnyObject) {
if showPassword{
showPassword = false
password.secureTextEntry = !showPassword
}else{
showPassword = true
password.secureTextEntry = !showPassword
}
//Changing font fix
password.font = UIFont(name: "systemFont", size: 14)
password.font = UIFont.systemFontOfSize(14)
}
На самом деле мне просто нужно 1 строка 'password.font = UIFont (name:" systemFont ", size: 14)'. Я предполагаю, что из-за отсутствия шрифта с именем * systemFont *, система вернется к системному шрифту по умолчанию. Кажется, довольно хаки. – Peacemoon
Pacemoon, Да, это хакки, но у вас не было другого выбора/помощи. Я попытался сделать это в одной строке, но не смог точно повлиять на размер, поэтому добавлен в эту дополнительную строку. – Abhijeet
Что делать, если нам нужно использовать собственный шрифт. – Leena
Установить defaultTextAttributes с настраиваемым атрибутом шрифта после переключения сек. ureTextEntry flag
NSDictionary * attrsDictionary = @ {NSFontAttributeName: // customfont};
_passwordtextfield.defaultTextAttributes = attrsDictionary;
Мне пришлось применить следующее решение с последним Xcode 7.1.1, которое действительно работало в моем случае. Я подозреваю, что эта проблема связана с каркасом.
- (IBAction)btnPasswordShowAction:(id)sender {
self.txtPassword.secureTextEntry = !self.txtPassword.secureTextEntry;
NSString *tmpString = self.txtPassword.text;
self.txtPassword.text = @" ";
self.txtPassword.text = tmpString;
[self.txtPassword setFont:nil];
self.txtPassword.font = [UIFont fontWithName:@"OpenSans-Regular" size:16.0];
}
#pragma mark - Textfield Delegate Methods
- (void)textFieldDidBeginEditing:(UITextField *)textField
{
[self.txtPassword setFont:nil];
self.txtPassword.font = [UIFont fontWithName:@"OpenSans-Regular" size:16.0];
}
- (BOOL)textFieldShouldEndEditing:(UITextField *)textField
{
[self.txtPassword setFont:nil];
self.txtPassword.font = [UIFont fontWithName:@"OpenSans-Regular" size:16.0];
return YES;
}
Поскольку я использовал пользовательские шрифты, нам нужно сохранить исходный шрифт. Создать расширение для UITextField
:
extension UITextField {
func enablePasswordModeWithShowHide() {
secureTextEntry = false
let showButton = UIButton(type: UIButtonType.System)
showButton.setTitle("HIDE", forState: .Normal)
showButton.titleLabel?.textAlignment = .Right
showButton.sizeToFit()
rightView = showButton
rightViewMode = .Always
showButton.addTarget(self, action: "handleShowHideTapped", forControlEvents: .TouchUpInside)
showButton.tintColor = UIColor.blackColor()
}
func handleShowHideTapped() {
secureTextEntry = !secureTextEntry
let font = self.font
self.font = nil
self.font = font
if let oldText = text {
text = "";
text = oldText;
}
if let button = rightView as? UIButton {
button.setTitle(secureTextEntry ? "SHOW" : "HIDE", forState: .Normal)
button.sizeToFit()
}
}
}
Где она может быть реализована следующим образом:
passwordTextField.enablePasswordModeWithShowHide()
Я наткнулся на этот же вопрос и выяснили решение. Проблема сводится к setSecureTextEntry
, изменяя шрифт, когда он установлен, и не меняет его, когда он не установлен. Фактически, вы никогда не сможете изменить шрифт, если у вашего UITextField
есть первый ответчик.
Код: resignFirstResponder
Перед тем как позвонить по телефону setSecureTextEntry:
, а затем becomeFirstResponder
. Это будет работы (начиная с iOS 9.2), но это вызывает отображение анимации клавиатуры/скрыть анимацию и заставит экран «встряхнуть». Чтобы обойти это, вам также нужно убить клавиатурную анимацию.
Вот мое полное решение:
- (void)setSecureTextEntry:(BOOL)secureTextEntry {
__weak typeof(self) weakSelf = self;
[UIView performWithoutAnimation:^{
BOOL resumeResponder = NO;
if([[weakSelf textEntryField] isFirstResponder]) {
resumeResponder = YES;
[[weakSelf textEntryField] resignFirstResponder];
}
[[weakSelf textEntryField] setSecureTextEntry:secureTextEntry];
if(resumeResponder) {
[[weakSelf textEntryField] becomeFirstResponder];
}
}];
}
PS: Это не ошибка Swift. Это ошибка UIKit. У меня была такая же проблема с Objective-C.
Все эти ответы в значительной степени работают, но мне пришлось использовать другое решение для достижения нужных мне результатов, учитывая, что я использую собственный шрифт.
Вам нужно сделать текстовое поле attributed
в раскадровке панели инспектора для UITextField, следующим образом:
Затем в коде, вам нужно управлять переключая видности, настройка каждый раз приписывать текст, чтобы обеспечить его надлежащее форматирование. Я также resignFirstResponder() на поле просто для того, чтобы позаботиться о каком-то затруднительном положении, которое я еще не понял.
func toggleShowPass() {
self.showing = !showing
txtpassword.secureTextEntry = !showing
textFieldPassword.resignFirstResponder()
let string = textFieldPassword.text!
let attrString = NSMutableAttributedString(string: string)
textFieldPassword.addAttribute(NSFontAttributeName, value: UIFont(name: "AvenirNext-Regular", size: 16.0)!, range: NSMakeRange(0, string.characters.count))
textFieldPassword.attributedText = attrString
}
- 1. UITextField меняет шрифт при редактировании
- 2. Как изменить UITextField при редактировании
- 3. Длина строки в Swift 1.2 и Swift 2.0
- 4. Изменение размера UITextField при редактировании
- 5. Изменение фона UITextField при редактировании
- 6. Swift 3: Добавление к UITextField при редактировании Изменено
- 7. Вызов WebService в Swift 2.0 vs Swift 1.2
- 8. Swift 1.2 Frameworks в XCode 7/Swift 2.0
- 9. Почему клавиатура не отображается при редактировании UITextField?
- 10. Изменение типа клавиши возврата при редактировании UITextField?
- 11. Передвиньте клавиатуру при редактировании UITextField на iOS9
- 12. Где лупа приобретает цвет при редактировании UITextField?
- 13. UITextField не показывают содержание при редактировании
- 14. Вызов метода при каждом редактировании UITextField
- 15. Как изменить цвет и шрифт заполнителя UITextfield с помощью swift 2.0?
- 16. UITextField сдвиг текста влево на 1px при редактировании
- 17. Как вставить UIPickerView при редактировании UITextField
- 18. Как захватить текст из UITextField swift 2.0
- 19. Изменение типа ключа ввода uitextfield при редактировании
- 20. Swift 1.2 -> Swift 2
- 21. Swift 1.2 BAD_EXEC_ACCESS при запуске
- 22. UITextField сбой при изменении текста в редактировании изменился
- 23. Swift- Обновление форматирования текстового поля при редактировании
- 24. Как преобразовать UITextField в целое число в Swift 2.0?
- 25. Как перенести мой проект Swift 1.2 в 2.0?
- 26. UITextView изменяет шрифт при обнаружении действия
- 27. AFNetworking 2.0 + TLS 1.2
- 28. Различия между nhibernate 1.2 и 2.0
- 29. Анализировать и Swift 1.2 Проблема
- 30. UITextField Китайский символ перемещается вниз при редактировании в iOS 10
Как виноват этот Свифт? Во всяком случае, это ошибка UIKit framework. Вы сообщили Apple? –