Red de conocimiento informático - Conocimiento informático - Cómo hacer que el cursor sea visible automáticamente en UITextView

Cómo hacer que el cursor sea visible automáticamente en UITextView

Normalmente, el sistema manejará automáticamente la visibilidad del cursor en UITextView. Sin embargo, en el desarrollo real, el diseño del producto no se limitará al espacio del sistema en sí, sino que los desarrolladores deben hacer todo lo posible para implementarlo y satisfacer el producto. diseñar y lograr los mejores resultados. La experiencia del usuario es lo que le da a un producto un punto de apoyo.

El siguiente es un escenario que podemos encontrar con frecuencia, como la interfaz de edición de correo electrónico.

La interfaz tiene los siguientes controles

UITextField *toTextField; // destinatario

UITextField *ccTextField; // cc

UITextField * sujetoTextField ; // asunto

UITextView *contentTextView; // contenido

Si la visualización está incompleta cuando hay demasiado contenido, también debemos agregar un UIScrollView y ajustar los controles anteriores. alrededor de él para Admite deslizar la interfaz hacia arriba y hacia abajo para ver todo el contenido

UIScrollView * scrollView;

Tal vez alguien se dé cuenta de que textView en sí se puede deslizar y que scrollView también se puede deslizar, lo que conducirá a muy mala experiencia. Al menos yo no dejaré que esta mala experiencia suceda, y estoy seguro de que tú también lo harás.

La solución es hacer que el marco de la vista de texto se adapte a su tamaño de contenido y luego cambiar dinámicamente el tamaño del contenido de la vista de desplazamiento para que la vista de texto no se deslice por sí sola.

Creo que la mayoría de la gente puede conocer los métodos de implementación específicos anteriores. Entonces, quienes lo hayan implementado se encontrarán con un problema difícil: cuando hay demasiado contenido, el cursor no se moverá hacia arriba automáticamente, lo que provocará que se pierda. Este es el problema principal presentado en este artículo: "El cursor es visible automáticamente"

//Aquí solo se introducen la adaptación de la vista de texto y la visibilidad automática del cursor, y se omiten otros detalles.

#pragma mark -- KVO --

- (void)addContentView

{

contentTextView = [[UITextView alloc] initWithFrame :CGRectMake(0, 157, 320.0f, 346)];

// Es muy importante establecer el espaciado inferior en 50.

Si no lo agrega, se producirán problemas anormales. Puede probarlo usted mismo

contentTextView.contentInset = UIEdgeInsetsMake(0, 0, 50, 0);

//Utilice KVO. para observar contentSize Dynamic

[ contentTextView addObserver: self forKeyPath: @ opciones "contentSize": NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context.nil];

CGSize size = scrollView.frame.size;

tamaño.height = CGRectGetMaxY(contentTextView.frame);

scrollView.contentSize = tamaño;

[scrollView addSubview: contentTextView]

}

p>

- (void)observeValueForKeyPath: (NSString *)keyPath

ofObject.(id)object

cambio: (NSDictionary *)cambio

contexto: (void *)context

{

// escucha un cambio en el tamaño contensido de la vista de texto

if ((( [[) keyPath isEqualToString:@"contentSize"])

{

UITextView *view = object;

// Obtener la altura del último tamaño de contenido de textView

CGFloat contentHeight = view.contentSize.height;

CGSize scrollViewContentSize = scrollView.contentSize;

if (contentHeight gt; 346) { // 346 es el altura predeterminada de la vista de texto

CGRect frame = view.frame;

frame.size.height = contentHeight 50 // 50 es el espaciado inferior

view.frame = frame;

scrollViewContentSize.height = view.frame.origin.y view.frame.size.height;

}else {

scrollViewContentSize .height = vista.marco. origen.y vista.marco.tamaño.altura;

}else {

vista.marco.tamaño.altura = vista.marco

.origin.y view.frame.size.height;

}else {

scrollViewContentSize.height = view.frame.origin.yheight = view.frame.origin.y vista. frame.size.height - 14;

}

scrollView.contentSize = scrollViewContentSize

// Obtener el área de posición del cursor

CGRect cursorPosition = [view caretRectForPosition: view.selectedTextRange.start];

// Altura del cursor relativa a las coordenadas del marco de la vista superior (scrollView)

CGFloat height = cursorPosition.origin.y view .frame.origin.y - _mailScrollView.contentOffset.y;

//

CGFloat currentPoint = cursorPosition.origin.y;