2017-09-14 4 views
6

Auparavant, tous les dialogues et textField fonctionnaient bien. Mais je ne sais pas comment ces TextFields sont soudainement changés en single line avec triple. (Comme un certain message ici ...)Tous les messages de la boîte de dialogue d'alerte et textField ont été remplacés par une seule ligne. Veuillez vérifier l'image

let alert = UIAlertController(title: "Cancel Booking !!", message: "Are you sure you want to cancel your booking?", preferredStyle: .alert) 
    alert.addAction(UIAlertAction(title: "No", style: .default, handler: nil)) 
    alert.addAction(UIAlertAction(title: "Yes", style: .default, handler: self.cancelMessageDialog)) 
    self.present(alert, animated: true, completion: nil) 

Demo 1 Demo 3

+2

où est l'image –

+0

Veuillez cocher les images mentionnées dans la publication. @Anbu – jazzbpn

+0

J'ai essayé votre code son affichage parfaitement, je pense que certains où vous avez modifié l'apparence –

Répondre

2

caractères de saut de ligne Add (\ n) à votre message.

+1

Désolé! Celui-ci n'est pas une bonne solution pour moi. Je veux obtenir des données du Web et devoir montrer dans la boîte de dialogue d'alerte. Déjà implémenté en utilisant \ n nouvelle balise de ligne. – jazzbpn

1

Vous devez utiliser attributedMessage chaîne avec la méthode setValue de UIAlertController ici comme suit:

let attributedString = NSAttributedString(string: "My long textMy long textMy long textMy long textMy long textMy long textMy long textMy long textMy long textMy long textMy long textMy long textMy long textMy long textMy long textMy long textMy long textMy long textMy long textMy long textMy long textMy long textMy long textMy long textMy long textMy long textMy long textMy long textMy long textMy long textMy long textMy long textMy long text", 
               attributes: [NSAttributedStringKey.font : UIFont(name: "Avenir-Light", size: 20)!]) 

    let alert = UIAlertController(title: "Title", message: "", preferredStyle: .alert) 

    alert.setValue(attributedString, forKey: "attributedMessage") 

    let yesAction = UIAlertAction(title: "Yes", style: .default) { (action) in 
    } 
    let noAction = UIAlertAction(title: "No", style: .cancel) { (action) in 
    } 

    alert.addAction(noAction) 
    alert.addAction(yesAction) 

    present(alert, animated: true, completion: nil) 
+0

Veuillez revérifier votre réponse avant de répondre à la question. Problème: Le type 'NSAttributedStringKey' (alias 'NSString') n'a aucun membre 'font' – jazzbpn

+0

Ne fonctionne pas, Veuillez ne pas donner de réponse irréaliste. @iNoob – jazzbpn

0

Vous devez définir numberOfLines propriété de UILabel, parce que la valeur par défaut est 1 (une seule ligne) & et la valeur de 0 signifie pas de limite, si la hauteur du texte atteint le nombre de lignes ou si la hauteur de la vue est inférieure au nombre de lignes autorisées, le texte sera tronqué en utilisant le mode de saut de ligne.

if #available(iOS 9.0, *) { 
     UILabel.appearance(whenContainedInInstancesOf: [UIAlertController.self]).numberOfLines = 0 
    } else { 
     // Fallback on earlier versions 
    } 
+1

Désolé, ne fonctionne pas pour moi. S'il vous plaît jeter un oeil à la première image, j'utilise ce code pour montrer la boîte de dialogue. let alerte = UIAlertController (titre: "", message: message, preferredStyle: UIAlertControllerStyle.alert) alert.addAction (UIAlertAction (titre: "OK", style: UIAlertActionStyle.default, gestionnaire: néant)) viewController.present (alert, animated: true, completion: nil) – jazzbpn

1

Enfin Résolu

Je résolu ce problème en faisant la coutume UILable à l'intérieur du UIViewController. Cela peut ne pas être la bonne pratique, alors veuillez me faire savoir si quelqu'un trouve la meilleure solution alors cela.

func showTestAlert(message:String , viewController:UIViewController){ 

    let customUiLableView:UILabel 
    let alert:UIAlertController 

    if((message.count) < 100){ 
     alert = UIAlertController(title: "", message: "\n\n\n\n", preferredStyle: .alert) 
     customUiLableView = UILabel(frame: CGRect(x: 10, y: 0, width: 250, height: 120)) 
     customUiLableView.numberOfLines = 4 
    }else if((message.count) < 200){ 
     alert = UIAlertController(title: "", message: "\n\n\n\n\n\n", preferredStyle: .alert) 
     customUiLableView = UILabel(frame: CGRect(x: 10, y: 0, width: 250, height: 160)) 
     customUiLableView.numberOfLines = 6 
    }else{ 
     alert = UIAlertController(title: "", message: "\n\n\n\n\n\n\n\n", preferredStyle: .alert) 
     customUiLableView = UILabel(frame: CGRect(x: 10, y: 0, width: 250, height: 200)) 
     customUiLableView.numberOfLines = 8 
    } 
    customUiLableView.text = message 
    customUiLableView.textAlignment = .center 
    customUiLableView.textColor = UIColor.darkGray 
    customUiLableView.font = UIFont(name: "Helvetica", size: 16.0) 

    let action = UIAlertAction(title: "OK", style: .default, handler: nil) 
    alert.view.addSubview(customUiLableView) 
    alert.addAction(action) 

    viewController.present(alert, animated: true, completion: nil) 

} 
+1

Pourriez-vous jamais trouver la cause de ce problème à la place de la solution de contournement ci-dessus? Je suis confronté au même problème que tous mes messages d'alerte ont changé en ligne unique et je suis sûr qu'ils travaillaient bien avant. –

+0

Désolé, pas jusqu'à aujourd'hui. – jazzbpn

+0

@BatuhanC., L'instruction sur cette page StackOverflow m'a aidé; https://stackoverflow.com/a/28545177/1179312 – ikel

0

J'ai eu le même problème et l'ai résolu après 3 jours et nuits. Puisque le UIAlertViewController utilise UILabel pour montrer le message, je cherchais fermement dans tout le projet quelque chose qui modifiait le UILabel. Je me suis rendu compte qu'aucun résultat de recherche n'inclut quelque chose de certains pods qui ont certainement des mots-clés "label" dans leurs noms de fonctions et autres. J'ai décidé de télécharger les codes sources de tous les pods de leurs dépôts et de les rechercher récursivement à l'intérieur avec un autre éditeur de texte simple et voilà! Un type a décidé de remplacer la classe UILabel par défaut au lieu de la sous-classer dans son module. Les lignes étaient coupables

extension UILabel { ... override open func draw(_ rect: CGRect) { ... } override open var intrinsicContentSize: CGSize { ... } ... }

Ceux-ci ne se présente pas dans les résultats de recherche en utilisant la fonction de recherche dans XCode que je cherchais pour les extensions UILabel pour commencer. Donc, je vous recommande d'ouvrir les codes sources d'un framework tiers dans votre projet et de les rechercher séparément. Il y a définitivement quelque chose qui dérange la classe UILabel.