Tengo un UITextView que se gestiona a través de la Interface Builder. Como la detección de datos que tengo «Enlaces» marcada. En iOS 6, todo está funcionando bien y los enlaces se destacó y se puede hacer clic. En iOS 7 sin embargo, todos los enlaces siguen siendo sólo texto plano. El editable y selección de las casillas de verificación está desactivada.

Lo que puede ser motivo de preocupación es que la UITextView es una subvista de un contenedor de vista que es, de nuevo dentro de un UIScrollView.

InformationsquelleAutor Tobias | 2013-09-23

17 Comentarios

  1. 68

    Parece que en iOS 7 detección de enlace sólo funciona si el UITextView es seleccionable. Así que toma mi UITextView no seleccionable dejado el enlace de detección de trabajo.

    También he probado este en iOS 6, y puedo confirmar que en iOS 6 la detección de enlace funciona bien incluso con el UITextView no ser seleccionable.

    • En iOS7.0.2 y Xcode5, cuando reviso seleccionables y enlace en UITextView a través de storyboard, detección de enlace funciona. Sin embargo, cuando me puse el textview en UITableViewCell en formato tableview, y rápido desplazamiento, se estrellará diciendo Terminación de la aplicación debido a uncaught exception ‘NSRangeException’, la razón: ‘NSMutableRLEArray objectAtIndex:effectiveRange:: Fuera de los límites’. Me enteré del accidente no va a suceder cuando no comprobar la detección de vínculo en el guión gráfico.
    • También me pareció que la detección de vínculo en UITextView a través de storyboard se mete a menos que establecer el tamaño de fuente mediante programación. raro..
    • Cuando seleccionables y no se puede editar
    • Lo mismo se aplica para iOS8(.1). Peor aún: Si puedo elegir, no modificable, no seleccionable y el número de teléfono de detección, la aplicación inmediatamente accidente. Alguna idea de cómo tener un número de teléfono de detección que no permiten seleccionar el contenido, si no el número de teléfono es detectado?
  2. 32

    Yo estaba teniendo algunos problemas con el número de teléfono de detección de hoy. Parecía que la UITextView iba a retener a los antiguos números de teléfono y mantener el texto resaltado después de que me había puesto el texto a otra cosa.

    Me pareció que si yo setText:nil antes de ajustar el texto a la nueva cadena, sería restablecer el textview, y números de teléfono de destacar como normal. Me pregunto si esto es algún tipo de bug con UITextView en iOS 7.0

    De cualquier manera, esto no funcionó para mí.

    • Gracias por tu respuesta, pero lamentablemente eso no hizo el truco.
    • Gracias! Trabajó para mí.
    • Esto funcionó para mí. Yo estaba teniendo problemas en donde el texto que contiene ambas direcciones Url y los números de teléfono y de todo el bloque de texto que se había convertido en uno de los enlaces para el número de teléfono al final del texto. Establecer la propiedad text de nada resuelto mi problema. Gracias!
    • Irónicamente me encontré con este problema de nuevo en otra aplicación que estoy construyendo. Ajuste de la textview para editar y, a continuación, la desconexión es editable, inmediatamente después, en el prepareForReuse método parecía funcionar mejor que el de configuración de texto a nil.
    • Ajuste del texto a nil trabajó para mí. Tengo una tabla de mensajes y cuando me insertar mensajes, comprobar las etiquetas en la cadena. Si las etiquetas están ahí, yo uso attributedText. El problema que tenía es si el mensaje anterior tenía las etiquetas resaltado en azul, cargar más mensajes hechos por los demás mensajes azul también, incluso si ellos no tienen etiquetas. Un gran consejo!
    • Ni la configuración de los textView de nada ni de alternar editable encendido y apagado parecía funcionar para mí.
    • Muchas gracias hombre. Como una simple corrección y estoy pateando a mí mismo por no pensar antes!!!

  3. 27

    Cuando iOS7 primera vez que salió esta plagado de mí y me encontré con una respuesta en este hilo (estableciendo el atributo de texto de la UITextView a cero antes de establecer el valor real que se hizo el truco). Entonces, de repente, el problema (para mí fue toda la cadena, se destaca como un enlace) recorta una copia de seguridad (supuestamente debido a una actualización de iOS).

    Lo que finalmente hizo el truco para mí fue dejar de usar el atributo de texto y establecer el attributedText. Una vez hice esto, la necesidad de ajuste de las fuentes/de desplazamiento/seleccionable/edita/etc. mediante programación, desapareció. He definido mi UITextView en IB, establezca los valores como yo quería (no desplazable, no editable, seleccionable, la detección de enlaces y números de teléfono) y luego se construyó una atribuido cadena y set:

    myUITextView.attributedString = myAttributedString;

    Y, de repente, todo funcionó como se esperaba. Espero que esto ayude a alguien más en el camino.

    • Esta es la única solución que trabajó para mí. Como de 7.0.4, ninguna de las otras soluciones parecía funcionar más.
    • Esta solución parece funcionar de forma fiable.
    • Fantástico! Esto es exactamente lo que necesitaba – todas las otras soluciones no fueron a trabajar? Pero este hecho. Gracias!
    • Este es el único que trabajó para nosotros en 7.1
    • Agregar a mis conclusiones, lo que también parece haber funcionado para mí en 7.1. Muchas gracias para calcular esto.
    • la mejor solución, sin hacks! simplemente genial! gracias!
    • me salvaste, muchas gracias esta es la mejor solución!
    • iOS 8.1 Swift, aún tenía el mismo problema, textview en las celdas de la tabla daría la vinculación al azar de fragmentos de texto que no tenía ningún enlace. Esta solucionado, Gracias!
    • Esto debe ser considerado como el derecho de respuesta como Missaq dijo que es el uno sin hacks
    • A mi me funciona en 8.3, sin embargo, no puedo establecer el color del texto. ForegroundColor en atribuidas texto es ignorado.

  4. 18

    Tuve el mismo problema y desactivación de desplazamiento en el UITextView activa el enlace de detección de la carga en lugar de trabajar sólo una vez que el usuario ha interactuado con el textview. El UITextView también tuvo que ser seleccionable y no editables.

    detailTextView.scrollEnabled = NO;
    detailTextView.editable = NO;
    detailTextView.selectable = YES;

    Ser seleccionable o tener desplácese a activado no es necesaria en iOS6.

    Otra cosa a comprobar es que userinteraction está habilitado en la celda y a la vista del contenido de la celda, de lo contrario, el enlace no se podrá hacer clic.

    • El desplazamiento de la punta fue perfecto gracias! Para una completa revisión, combinar esto con texto = nil y funciona!
    • desmarcando Desplazamiento Habilitado resuelto mi problema. gracias!
    • De acuerdo con @NV. La adición de texto = nil antes de estos 3 funciona perfecto! Gracias
  5. 14

    Comprobar Estas Líneas se debe agregar el uso de detector de datos de propiedad de textview en UItableView de la célula.

        txtvwMsgText.userInteractionEnabled = YES;
        txtvwMsgText.dataDetectorTypes = UIDataDetectorTypeLink;
        txtvwMsgText.scrollEnabled = NO;
        txtvwMsgText.editable = NO;
        txtvwMsgText.selectable = YES;
  6. 8

    Usted debe comprobar fuera de NSDataDetector.

    Usted puede usar esto para encontrar y tratar con diferentes datos (enlaces, números de teléfono y más). Echar un vistazo a este sitio:

    http://nshipster.com/nsdatadetector/

    También puede utilizar el dataDetectorTypes propiedad de UITextView para establecer lo que se quiere detectar en el código. Sólo puede ser un guión de transición problema para usted.

    textView.dataDetectorTypes = UIDataDetectorTypeLink;
    • Gracias por tu respuesta, pero en iOS 6 UITextView hizo sin la necesidad de una codificación adicional (con el derecho de los detectores de establecer en IB). Entonces, ¿por qué ya no funciona en iOS 7?
    • Por eso me pregunto si no hay un IB problema. ¿Actualizar el uso de los nuevos guiones gráficos en Xcode 5, tal vez?
    • No he utilizado los storyboards desde el principio del proyecto, a pesar de que he actualizado desde Xcode 4 a Xcode 5 en el medio.
    • Si sustituye el texto de la vista de la subclase a un estándar. Funciona como se esperaba?
    • No, lamentablemente no. También traté de establecer los tipos de detectores con el ejemplo de código que usted sugirió, pero fue en vano.
    • Wow, esta realmente trabajado para mí! SALUDOS!!!

  7. 7

    Ser consciente, de que su textview sólo reconocerá los enlaces si no editable!

    Aquí es un buen tutorial sobre cómo hacer un editable UITextView con `detección de enlace`

    Editable UITextView con enlace de detecion

    No he tenido ningún problema con esa solución desde ahora.

    El truco es un GestureRecognizer forwaring toques y activación/desactivación de la edición.

    Podría aplicar lo mismo con el selectable /not selectable problema en iOS7

    • url es la redirección a falso/ sitio equivocado
  8. 5

    Después de algunas pruebas, he encontrado la solución.

    Si quieres los enlaces activos y no de selección está activada, usted necesita para editar gestureRecognizers.

    Por ejemplo – hay 3 LongPressGestureRecognizers. Uno para haga clic en el enlace (minimumPressDuration = 0.12), la segunda de zoom en modo editable (minimumPressDuration = 0.5), la tercera de selección (minimumPressDuration = 0.8). Esta solución elimina LongPressGestureRecognizer para la selección y la segunda para hacer zoom en el modo de edición.

    NSArray *textViewGestureRecognizers = self.captionTextView.gestureRecognizers;
    NSMutableArray *mutableArrayOfGestureRecognizers = [[NSMutableArray alloc] init];
    for (UIGestureRecognizer *gestureRecognizer in textViewGestureRecognizers) {
        if (![gestureRecognizer isKindOfClass:[UILongPressGestureRecognizer class]]) {
            [mutableArrayOfGestureRecognizers addObject:gestureRecognizer];
        } else {
            UILongPressGestureRecognizer *longPressGestureRecognizer = (UILongPressGestureRecognizer *)gestureRecognizer;
            if (longPressGestureRecognizer.minimumPressDuration < 0.3) {
                [mutableArrayOfGestureRecognizers addObject:gestureRecognizer];
            }
        }
    }
    self.captionTextView.gestureRecognizers = mutableArrayOfGestureRecognizers;

    Probado en iOS 9, pero debería funcionar en todas las versiones (iOS 7, 8, 9).
    Espero te sirva de ayuda! 🙂

    • Finalmente la única solución que trabajó para mí.
  9. 4

    He encontrado el truco, esto funciona en iOS 7!

    Usted tiene que fijar el UITextView seleccionable en su xib o mediante programación

    self.yourTextView.selectable = YES;

    y, a continuación, usted tiene que desactivar pergaminos y habilitar de nuevo después de establecer su texto.

    self.yourTextView.scrollEnabled = NO;
    [self.yourTextView setText:contentString];
    self.yourTextView.scrollEnabled = YES;
    • No sé si esto se ha solucionado el problema, o simplemente por la interferencia de la whatsit en el whackdoodle me fijo el thingamajigger.
  10. 4

    Por medio de un UITextView está habilitado, seleccionable, no desplazable & enlaces detectable no es tan simple como parece. He encontrado esto en iOS 8. Así que mi solución fue hacer algo como esto en viewDidLoad y, a continuación, establezca propiedad editable para que NO cuando textBox con la edición(normalmente sería un método como doneIsTapped). El truco aquí es fijar las propiedades editables para NO después de la creación de valor de texto a textview se ha completado. Esto permitirá a los enlaces en la UITextview.

    - (void)viewDidLoad 
    {
        [super viewDidLoad];
        self.txtViewComment.editable = YES;
        self.txtViewComment.selectable = YES;
        self.txtViewComment.dataDetectorTypes = UIDataDetectorTypeLink;
        self.txtViewComment.scrollEnabled = NO;
    }

    y

    - (IBAction)doneIsTapped:(id)sender 
    {
        self.txtViewComment.text = @"set text what ever you want";
        self.txtViewComment.editable = NO; 
    }

    esto hizo que los enlaces habilitados en el textview. También le recomendamos no usar la placa de la historia en este momento(o hasta que apple corrige este problema) y sólo tiene que utilizar el código para evitar cualquier confusión innecesaria. Espero que esta ayuda.

  11. 2

    La desactivación de UITextViews de desplazamiento capacidad hice el truco para mí en una configuración similar.

    • Gracias, esta es la respuesta que trabajó para mí.
  12. 2

    Cambiar el Matiz de color a otro color que realmente funciona.
    Sin embargo, si seleccionable permitir que el tinte también será del mismo color.

    • Esto es correcto!
    • Ya esta resuelto para mí. Mis enlaces estaban trabajando, pero no visible. Resulta que usted necesita para ajustar el tinte de color a un color propio, y se va a utilizar para los enlaces. Gracias Desmond.
  13. 0

    Esta solución funciona para mí:

    textView.selectable = YES;
    textView.delegate = self;
    
    - (void) textViewDidChangeSelection:(UITextView *)textView;
    {
        NSRange range = NSMakeRange(NSNotFound, 0.0);
        if ( range.length && !NSEqualRanges(range, textView.selectedRange) ) {
            textView.selectedRange = range;
        }
    }
  14. 0

    Si usted está agregando UITextview mediante programación acaba de agregar a continuación de las líneas:

            _textView.userInteractionEnabled = YES;
            _textView.dataDetectorTypes = UIDataDetectorTypeLink;
            _textView.scrollEnabled = NO;
            _textView.editable = NO;

    Esto funcionó para mí.

  15. 0

    Ninguna de las anteriores trabajado para mí, no hice esto:

    [self.textView setDataDetectorTypes:UIDataDetectorTypeNone];
    [self.textView.setTextColor:[UIColor whiteColor]];
    [self.textView setDataDetectorTypes:UIDataDetectorTypeNone];

    Yo lo hice con mi textview que se suponía que era para detectar todos los tipos, y que no había detectado color blanco. Usted puede cambiar el código de representar a su buen color y tipos de enlace de detectar.

  16. 0

    Mientras que este hilo es viejo, no veo una respuesta que trabajó para mí con Swift, así que aquí va para Swift 2.2

    textView.dataDetectorTypes = UIDataDetectorTypes.Link
    textView.selectable = true

Dejar respuesta

Please enter your comment!
Please enter your name here