es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo obtener el rango y la posición del cursor en UITextView.

Hola, estoy intentando crear un editor de texto personalizado, para lo cual quiero conocer la posición del cursor y el rango del texto en UITextView para poder aplicarle TextAttributes según las opciones seleccionadas por el usuario.

Por ejemplo:

\n Este es el primer párrafo \n Este es el segundo párrafo \n

Para esta cadena, si el cursor está en cualquier lugar del primer párrafo y el usuario selecciona algún atributo de texto, entonces solo quiero cambiar Este es el primer párrafo según la selección.

Por ahora, sé que esto se puede lograr utilizando multiples atributos de texto para un rango específico. No puedo obtener el rango basado en el cursor y los caracteres de salto de línea.

Soy nuevo en esto. Si hay alguna otra forma de lograr esto, por favor háganmelo saber. Gracias.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para obtener la posición del cursor y el rango de texto en UITextView, puedes usar la propiedad selectedRange de la clase UITextView. Esta propiedad devuelve un objeto NSRange que especifica el rango de texto actualmente seleccionado o la posición del cursor si no se ha seleccionado ningún texto.

    Para aplicar TextAttributes basados en las opciones seleccionadas por el usuario, puedes usar la clase NSAttributedString. Crea una instancia de la clase NSMutableAttributedString y aplica los TextAttributes deseados al rango deseado usando el método addAttribute(_:value:range:).

    Para obtener el rango de texto para un párrafo específico, puedes usar la clase NSRegularExpression para buscar el párrafo deseado usando expresiones regulares. Aquí tienes un ejemplo de código que demuestra esta técnica:

    let text = "\nEste es el primer párrafo\nEste es el segundo párrafo\n"
    let selectedRange = textView.selectedRange
    
    // Encuentra el rango del párrafo actual
    let regex = try! NSRegularExpression(pattern: "^.*$", options: .anchorsMatchLines)
    let paragraphs = regex.matches(in: text, options: [], range: NSRange(location: 0, length: text.utf16.count))
    let currentParagraphRange = paragraphs.first(where: { $0.range.contains(selectedRange.location) })?.range ?? NSRange(location: 0, length: 0)
    
    // Aplica los TextAttributes deseados al párrafo actual
    let attributedText = NSMutableAttributedString(string: text)
    attributedText.addAttribute(.foregroundColor, value: UIColor.red, range: currentParagraphRange)
    
    // Establece el texto atribuido en el UITextView
    textView.attributedText = attributedText
    

    Este ejemplo de código encuentra el rango del párrafo actual que contiene la posición del cursor y aplica el atributo de color rojo al texto de ese párrafo. Puedes modificar los atributos y la expresión regular para adaptarte a tus necesidades.

Comments are closed.