2017-01-03 2 views
-1

Je dois faire "Conditions d'utilisation" dans la chaîne ci-dessous bleu et le faire répondre à un clic. Je ne veux pas utiliser un bouton alors comment puis-je le faire dans un UILabel? chaîne: En tapant sur Suivant et continuer vous acceptez les Conditions d'utilisationFaire du texte dans UILabel bleu et cliquable

Code I essayée, mais a échoué juste obtenu le changement de couleur du texte:

var myMutableString = NSMutableAttributedString() 
      myMutableString = NSMutableAttributedString(string: self.termsLabel.text! as String, attributes: [NSFontAttributeName:UIFont(name: self.termsLabel.font.fontName, size: self.termsLabel.font.pointSize)!]) 
      myMutableString.addAttribute(NSForegroundColorAttributeName, value: UIColor.blue, range: NSRange(location:self.termsLabel.text!.characters.count - 12,length:12)) 
      self.termsLabel.attributedText = myMutableString 
+0

Il sera utile de savoir POURQUOI il ne peut pas s'agir d'un UIButton. Il y a quelques options pour faire ceci, mais elles peuvent être ce que vous voulez. Par exemple, quelle est la backgroundColor de UILabel? Et encore une fois, pourquoi cette exigence n'est-elle pas remplie par ce que vous obtenez avec un UIContol ou sa sous-classe, UIButton? – dfd

+0

Est-ce que [this] (http://stackoverflow.com/questions/32309247/add-read-more-to-the-end-of-uilabel) est similaire à ce que vous cherchez? –

+0

Merci d'avoir répondu à l'OP. Si c'est le cas, la réponse est correcte. Mais peut-être y a-t-il plus à cette question que nous le savons. Ne présumez pas! Mon instinct ** dire ** un UIButton fonctionne parfaitement bien, mais l'OP, avec un peu de BTW, peut avoir une raison différente de moi et vous supposez. Ainsi, pas ** encore ** évident. – dfd

Répondre

1

Ne pas utiliser un UILabel. Utilisez un UITextField ou UITextView, et installez le texte attribué, y compris un lien. Puis configurez les méthodes déléguées pour détecter & répondre aux liens. Vous devez implémenter la méthode UITextViewDelegate

func textView(UITextView, 
    shouldInteractWith: URL, 
    in: NSRange, 
    interaction: UITextItemInteraction) 

Une des façons les plus faciles à configurer votre lien pour charger le contenu d'un fichier RTF dans le champ.

J'ai un projet de démonstration sur GitHub appelé DatesInSwift qui crée des liens cliquables qui déclenchent une URL personnalisée qui invoque l'URL dans l'application.

Ce projet utilise une extension UITextView qui a ajoute la propriété @IBInspectable RTF_Filename à UITextView champs. Tout ce que vous avez à faire est de définir la propriété RTF_Filename de votre affichage de texte au nom de fichier du fichier RTF que vous devez charger.

On dirait que mon projet a été écrit pour Swift 2, et utilise l'ancienne version de la méthode UITextViewDelegate, qui a été appelé

func textView (_ textView: UITextView, URL shouldInteractWithURL: Foundation.URL, inRange Characterrange: NSRange) -> Bool

+0

il n'y a pas une URL à l'arrière du texte cliquable. c'est juste une ibaction qui a une seague à la prochaine vue. – user1079052

+0

Si vous voulez que le texte soit cliquable, plutôt qu'un bouton transparent que vous placez manuellement au-dessus du texte, vous devez avoir une URL. Si vous regardez l'application à laquelle j'ai posté un lien, elle utilise un schéma d'URL personnalisé pour invoquer une méthode dans le délégué de l'application lorsque vous cliquez sur un lien, et je transmets ce lien à mon contrôleur de vue. –

+0

Si vous utilisez un bouton transparent, placer le bouton au-dessus du texte est un défi, en particulier avec différentes tailles d'écran, et si vous prenez en charge la localisation dans différentes langues, il devient vraiment difficile. –

0

Je suis venu à la conclusion que je ne pouvais pas obtenir exactement ce que je voulais, je lançai donc le texte dans un bouton et a ajouté ce code

let mainText = "By tapping Next and continuing you agree to the Terms Of Use" 
    let attributeText = "Terms Of Use" 
    let range = (mainText as NSString).range(of: attributeText) 
    let attributedString = NSMutableAttributedString(string:mainText) 
    attributedString.addAttribute(NSForegroundColorAttributeName, value: UIColor.blue, range: range) 
    self.termsLabel.attributedText = attributedString 
    let tapGesture: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(self.goToTOSView)) 
    tapGesture.numberOfTapsRequired = 1 
    self.termsLabel.isUserInteractionEnabled = true 
    self.termsLabel.addGestureRecognizer(tapGesture)