web-dev-qa-db-fra.com

Xcode 11 Beta - iOS 13 Simulator - UITextField avec Placeholder se bloquant l'application

Dans la version bêta de Xcode 11 et le simulateur iOS 13, un crash se produit lors de l'accès à la clé d'étiquette TextField _placeholderLabel.textColor.

Clé utilisée pour appliquer la couleur du texte d'espace réservé.

[textfield setValue:[UIColor whiteColor] forKeyPath:@"_placeholderLabel.textColor"];

"NSGenericException" - raison: "L'accès à l'ivar _placeholderLabel d'UITextField est interdit. Il s'agit d'un bogue d'application"

21
PrasathBabu

Remplacez simplement _placeholderLabel avec placeholderLabel

0
Ar No

- Swift Version

Ajoutez le code suivant au bas du paramètre d'espace réservé:

    let iVar = class_getInstanceVariable(UITextField.self, "_placeholderLabel")!
    let placeholderLabel = object_getIvar(textField, iVar) as! UILabel

    placeholderLabel.textColor = .white

Par exemple:

override func viewDidLoad() {
    super.viewDidLoad()
    view.backgroundColor = .gray

    let textField = UITextField()
    textField.frame = CGRect(x: 0, y: 100, width: 300, height: 50)
    textField.placeholder = "UITextField Demo"
    view.addSubview(textField)
    let iVar = class_getInstanceVariable(UITextField.self, "_placeholderLabel")!
    let placeholderLabel = object_getIvar(textField, iVar) as! UILabel

    placeholderLabel.textColor = .white
}
0
Mojtaba Hosseini

Swift 5

Voici un remplacement correct de Swift de cette propriété. Notez que si vous modifiez également l'alignement d'autres propriétés pour le champ de texte, vous devez également définir ces propriétés sur le texte attribué à l'espace réservé. Généralement, seule la couleur et la police sont modifiées:

/// Set placeholder text color
/// - Parameter color: the color
func setPlaceholderColor(_ color: UIColor) {
    // Color
    var attributes: [NSAttributedString.Key: Any] = [.foregroundColor: color]
    var range = NSRange(location: 0, length: 1)

    // Font
    if let text = attributedText, text.length > 0, let attrs = attributedText?.attributes(at: 0, effectiveRange: &range), let font = attrs[.font] {
        attributes[.font] = font
    }
    else if let font = font {
        attributes[.font] = font
    }
    self.attributedPlaceholder = NSAttributedString(string: self.placeholder ?? "", attributes: attributes)
}
0
Alexander Volkov

POUR UISEARCHBAR PLACEHOLDER COULEUR

Xcode 11.1

À partir d'iOS 13, le SDK fournit ISearchBar.searchTextField afin que nous puissions utiliser une API publique au lieu d'une API privée. Dans la sous-classe de UISearchBar j'ai utilisé ce code pour changer la couleur de l'espace réservé

UITextField *textField = [self findSubviewOfClass:[UITextField class]];
textField.textColor = [UIColor whiteColor];
//textField.font = [UIFont fontWithName:@"HelveticaNeue-Regular" size:14.0f];

if (@available(iOS 13.0, *)) {
    self.searchTextField.attributedPlaceholder = [[NSAttributedString alloc] initWithString:self.placeholder attributes:@{NSForegroundColorAttributeName: [UIColor colorWithRed:0.8 green:0.82 blue:0.81 alpha:1]}];

}else {
    [textField setValue:[UIColor colorWithRed:0.8 green:0.82 blue:0.81 alpha:1] forKeyPath:@"_placeholderLabel.textColor"];

}
0
Anuraj

Pour IOS 13, vous pouvez définir la couleur de l'espace réservé UITextField par un code de ligne.

Objectif C

[textField setAttributedPlaceholder:[[NSAttributedString alloc] initWithString:@"PlaceHolder Text" attributes:@{NSForegroundColorAttributeName:[UIColor whiteColor]}]];

Dans Swift 5

txtTitle.attributedPlaceholder = NSAttributedString(string:"PlaceHolder Text", attributes: [NSAttributedString.Key.foregroundColor: UIColor.white])
0