Encontramos la contestación a esta pregunta, al menos eso pensamos. Si presentas interrogantes puedes dejarlo en el apartado de comentarios, que sin tardar
Solución:
No es necesario utilizar un reconocedor de gestos por separado, ya que algunas de las respuestas indican. En su lugar, puede utilizar texto atribuido en combinación con el UITextViewDelegate
‘s textView:shouldInteractWithURL:inRange:interaction:
método para lograr esto, por ejemplo:
class ViewController: UIViewController, UITextViewDelegate
@IBOutlet weak var textView: UITextView!
override func viewDidLoad()
super.viewDidLoad()
let text = NSMutableAttributedString(string: "Already have an account? ")
text.addAttribute(NSAttributedString.Key.font, value: UIFont.systemFont(ofSize: 12), range: NSMakeRange(0, text.length))
let selectablePart = NSMutableAttributedString(string: "Sign in!")
selectablePart.addAttribute(NSAttributedString.Key.font, value: UIFont.systemFont(ofSize: 12), range: NSMakeRange(0, selectablePart.length))
// Add an underline to indicate this portion of text is selectable (optional)
selectablePart.addAttribute(NSAttributedString.Key.underlineStyle, value: 1, range: NSMakeRange(0,selectablePart.length))
selectablePart.addAttribute(NSAttributedString.Key.underlineColor, value: UIColor.black, range: NSMakeRange(0, selectablePart.length))
// Add an NSLinkAttributeName with a value of an url or anything else
selectablePart.addAttribute(NSAttributedString.Key.link, value: "signin", range: NSMakeRange(0,selectablePart.length))
// Combine the non-selectable string with the selectable string
text.append(selectablePart)
// Center the text (optional)
let paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.alignment = NSTextAlignment.center
text.addAttribute(NSAttributedString.Key.paragraphStyle, value: paragraphStyle, range: NSMakeRange(0, text.length))
// To set the link text color (optional)
textView.linkTextAttributes = [NSAttributedString.Key.foregroundColor:UIColor.black, NSAttributedString.Key.font: UIFont.systemFont(ofSize: 12)]
// Set the text view to contain the attributed text
textView.attributedText = text
// Disable editing, but enable selectable so that the link can be selected
textView.isEditable = false
textView.isSelectable = true
// Set the delegate in order to use textView(_:shouldInteractWithURL:inRange)
textView.delegate = self
func textView(_ textView: UITextView, shouldInteractWith URL: URL, in characterRange: NSRange, interaction: UITextItemInteraction) -> Bool
// **Perform sign in action here**
return false
En lugar de la etiqueta, puede usar la vista de texto para abrir el controlador de vista o hacer que se pueda hacer clic en la subcadena
-
crear attribute por string que quieres que se pueda hacer clic
let linkAttributes = [ NSLinkAttributeName: NSURL(string: "https://www.apple.com")!, NSForegroundColorAttributeName: UIColor.blue ] as [String : Any]
-
Haz tu string atribuido string
let attributedString = NSMutableAttributedString(string:"My name is Jarvis") attributedString.setAttributes(linkAttributes, range: NSMakeRange(5, 10))
puede dar su rango personalizado aquí.
-
Agregue texto atribuido a su vista de texto
YourTextView.attributedText = attributedString
-
Luego, implemente el siguiente método delegado de vista de texto para implementar la interacción para la URL
func textView(_ textView: UITextView, shouldInteractWith URL: URL, in characterRange: NSRange) -> Bool // here write your code of navigation return false
-
Si desea hacerlo con etiqueta, haga clic aquí (Cómo hacer un enlace en el que se puede hacer clic en una NSAttributedString para a)
Actualización de idioma basada en la respuesta de @Lindsey Scott 🙂
Rápido 4
class ViewController: UIViewController, UITextViewDelegate
@IBOutlet weak var textView: UITextView!
override func viewDidLoad()
super.viewDidLoad()
let text = NSMutableAttributedString(string: "Already have an account? ")
text.addAttribute(NSAttributedStringKey.font,
value: UIFont.systemFont(ofSize: 12),
range: NSRange(location: 0, length: text.length))
let interactableText = NSMutableAttributedString(string: "Sign in!")
interactableText.addAttribute(NSAttributedStringKey.font,
value: UIFont.systemFont(ofSize: 12),
range: NSRange(location: 0, length: interactableText.length))
// Adding the link interaction to the interactable text
interactableText.addAttribute(NSAttributedStringKey.link,
value: "SignInPseudoLink",
range: NSRange(location: 0, length: interactableText.length))
// Adding it all together
text.append(interactableText)
// Set the text view to contain the attributed text
textView.attributedText = text
// Disable editing, but enable selectable so that the link can be selected
textView.isEditable = false
textView.isSelectable = true
textView.delegate = self
func textView(_ textView: UITextView, shouldInteractWith URL: URL, in characterRange: NSRange) -> Bool
//Code to the respective action
return false
Te invitamos a sustentar nuestra tarea escribiendo un comentario y valorándolo te lo agradecemos.