2015-09-24 7 views
0

У меня проблема с атрибутами заполнителя UITextField. Я определил атрибуты текста как глобальную переменную, установил UITextField по умолчаниюTextAttributes и attributedPlaceholder в методе viewDidLoad и реализовал методы делегата текстового поля, чтобы показать текст по умолчанию, если текстовое поле остается пустым после окончания редактирования.UITextField атрибуты текста заполнителя сохраняют сброс

// MARK: - Define global meme text attributes 
// Set text attributes 
let memeTextAttributes = [ 
    NSStrokeColorAttributeName: UIColor.blackColor(), 
    NSForegroundColorAttributeName: UIColor.whiteColor(), 
    NSFontAttributeName: UIFont(name: "HelveticaNeue-CondensedBlack", size: 40)!, 
    NSStrokeWidthAttributeName: -3.0 
] 

    override func viewDidLoad() { 
    super.viewDidLoad() 

    // Format image to maintain aspect ratio 
    imagePickerView.contentMode = UIViewContentMode.ScaleAspectFit 

    // Set text attributes and alignment 
    topTextField.defaultTextAttributes = memeTextAttributes 
    bottomTextField.defaultTextAttributes = memeTextAttributes 
    topTextField.textAlignment = NSTextAlignment.Center 
    bottomTextField.textAlignment = NSTextAlignment.Center 

    // Set placeholder text for text fields 
    topTextField.attributedPlaceholder = NSAttributedString(string: "TOP", attributes: memeTextAttributes) 
    bottomTextField.attributedPlaceholder = NSAttributedString(string: "BOTTOM", attributes: memeTextAttributes) 

    // Set text field delegates 
    topTextField.delegate = self 
    bottomTextField.delegate = self 

    // Add tap gestures to dismiss keyboard when user taps outside of text field 
    let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: "dismissKeyboard") 
    view.addGestureRecognizer(tap) 
} 

текста Методы поля делегата:

// MARK: - Text field delegate methods 
func textFieldDidBeginEditing(textField: UITextField) { 
    textField.attributedPlaceholder = nil 
} 

func textFieldDidEndEditing(textField: UITextField) { 
    // If textField is empty, show respective default placeholder text 
    if textField.text == "" { 
     if textField == topTextField { 
      textField.attributedPlaceholder = NSAttributedString(string: "TOP", attributes: memeTextAttributes) 
     } 
     else { 
      textField.attributedPlaceholder = NSAttributedString(string: "BOTTOM", attributes: memeTextAttributes) 
     } 
    } 
} 

И текст и заполнитель должен иметь тот же атрибуты текста, но проблема в том случае, если пользователь оставляет текстовое поле пустым, после его редактирования, следующий время, которое они идут, чтобы отредактировать его, текст заполняется только и не имеет штриха, который был определен в текстовых атрибутах. Но если пользователь не оставляет текстовое поле пустым, текст отображается так, как должен.

Если начальное редактирование пуст, текст не имеет инсульта: http://i59.tinypic.com/200r1mp.png

Если начальное редактирование не является пустым, текст появляется в порядке: http://i57.tinypic.com/t8oqkm.png

Любая идея, почему это происходит? Если атрибуты text/placeholder были установлены при загрузке представления, то он не должен меняться, если какой-либо метод явно не изменил его правильно?

+0

когда-либо понял это? У меня такая же проблема.. –

ответ

0

Чтобы избежать такого поведения, вы можете использовать textFieldShouldEndEditing: вместо textFieldDidEndEditing:. В вашем случае это не имеет большого значения.