iOS SDK UITextView y UITextViewDelegate

En este tutorial básico de iOS SDK, vamos a crear un UITextView, implementar el UITextViewDelegate Métodos de protocolo, y uso. NSLog Para ver cuándo se llaman los métodos. También veremos cómo limitar la cantidad de caracteres en una vista de texto y cómo usar la tecla de retorno para renunciar al teclado. Siga leyendo para aprender cómo implementar estas características en su aplicación.!


Paso 1: Crear un nuevo proyecto de Xcode

Inicie Xcode y haga clic en Archivo> Nuevo> Proyecto. Haga clic en "Aplicación" en el panel de iOS a la izquierda. Haga clic en el icono titulado "Aplicación de vista única" y haga clic en "Siguiente". En el campo "Nombre del producto", escriba "TextViewARC" e ingrese un nombre para su Identificador de compañía, como "com.companyName". Elija "iPhone" en el menú "Familia de dispositivos". Asegúrese de desmarcar "Usar guiones gráficos" e "Incluir pruebas unitarias", y marque "Usar conteo automático de referencias" antes de hacer clic en "Siguiente". Elija una ubicación para almacenar su proyecto y haga clic en "Crear".

En el campo "Nombre del producto", escriba "TextViewARC" e ingrese un nombre para su Identificador de compañía, como "com.companyName". Elija "iPhone" en el menú "Familia de dispositivos". Asegúrese de desmarcar "Usar guiones gráficos" e "Incluir pruebas unitarias" y marque "Usar conteo automático de referencias" antes de hacer clic en "Siguiente". Elija una ubicación para almacenar su proyecto y haga clic en "Crear".


Paso 2: Creando un UITextView

Un objeto UITextView se puede crear mediante programación (es decir, en código) o gráficamente con la herramienta Interface Builder. Este tutorial mostrará brevemente cómo crear el objeto con ambos métodos.

Programáticamente

Haga clic en el archivo "ViewController.m" y escriba el siguiente código.

 CGRect textViewFrame = CGRectMake (20.0f, 20.0f, 280.0f, 124.0f); UITextView * textView = [[UITextView alloc] initWithFrame: textViewFrame]; textView.returnKeyType = UIReturnKeyDone; [self.view addSubview: textView];

Esto crea programáticamente un UITextView objeto y lo agrega a la vista de la ViewController.

Con Interface Builder

Alternativamente, puedes crear un UITextView en el archivo .xib. Comience haciendo clic en el archivo .xib en el panel "Navegador" de la ventana de Xcode. Haga clic en "Ver" en el panel "Esquema del documento" a la izquierda. Haga clic en Ver> Utilidades> Mostrar biblioteca de objetos. Desplácese por la biblioteca de objetos en la esquina inferior izquierda hasta que encuentre un objeto de "Vista de texto". Haga clic para seleccionarlo, luego arrastre y suelte la vista de texto en la vista. Ajusta la vista de texto para que se asiente en la parte superior de la vista y tenga aproximadamente 125 píxeles de altura..


Paso 3: Extracción del teclado

La resignación del teclado cuando se toca el fondo se puede lograr de diferentes maneras. El siguiente código es un ejemplo de una de estas técnicas. Haga clic en el archivo "ViewController.m" y agregue el siguiente método de implementación:

 - (void) touchesBegan: (NSSet *) toca conEvent: (UIEvent *) evento NSLog (@ "touchesBegan: withEvent:"); [self.view endEditing: YES]; [super touchesBegan: toca conEvent: event]; 

Paso 4: Métodos de protocolo de delegado

En pocas palabras, un delegado ayuda a dos objetos a comunicarse entre sí. En el caso de la UITextViewDelegate métodos, los UITextView puede enviar mensajes a los métodos de delegado cuando ocurren ciertos eventos, como cuando la vista de texto comienza a editarse. Cuando se envía un mensaje a uno de los métodos, tiene la oportunidad de realizar acciones personalizadas. El seguimiento UITextViewDelegate Las implementaciones de métodos demuestran cómo podrías hacer esto..

Antes de implementar los métodos de delegado, regresemos y configuremos vista de texto delegar propiedad a yo con el fin de establecer el ViewController objetar como delegado de la UITextView. Haga clic en el archivo "ViewController.m". En el viewDidLoad Método, donde creamos programáticamente la vista de texto, agregue el siguiente código sobre el [self.view addSubview: textView]; línea (siempre puede consultar el código fuente adjunto a esta publicación para obtener ayuda).

 textView.delegate = self;

Para hacer lo mismo con la vista de texto creada en Interface Builder, haga clic en el archivo "ViewController.xib". Seleccione la vista de texto y haga clic en Ver> Utilidades> Mostrar inspector de conexiones. Haga clic en la flecha "Salidas" en el panel "Inspector de conexiones" para abrirla. Haga clic en el círculo al lado de "delegar", luego haga clic y arrastre desde el círculo hasta "Propietario del archivo" para establecer la conexión entre la vista de texto y la ViewController.

Haga clic en "ViewController.h" y escriba el siguiente código para cumplir con UITextViewDelegate protocolo.

 @interface ViewController: UIViewController 

los UITextViewDelegate los métodos de protocolo son todos opcionales, lo que significa que no tiene que implementarlos si no los está utilizando. Hablemos de los métodos a medida que los agregamos..

textViewShouldBeginEditing: y textViewDidBeginEditing:

Haga clic en "ViewController.m" y agregue el siguiente código.

 - (BOOL) textViewShouldBeginEditing: (UITextView *) textView NSLog (@ "textViewShouldBeginEditing:"); devuelve SÍ;  - (void) textViewDidBeginEditing: (UITextView *) textView NSLog (@ "textViewDidBeginEditing:"); textView.backgroundColor = [UIColor greenColor]; 

El método textViewShouldBeginEditing: se llama justo antes La vista de texto se activa. El método textViewDidBeginEditing: se llama cuando la vista de texto se activa y cambia al primer estado de respuesta. Las personalizaciones de comportamiento que desea que ocurran a medida que la vista de texto se active deben ir aquí. En nuestro ejemplo, el color de fondo de la vista de texto se vuelve verde cuando la vista de texto está activa.

textViewShouldEndEditing: y textViewDidEndEditing:

Agregue el siguiente código debajo de los métodos anteriores.

 - (BOOL) textViewShouldEndEditing: (UITextView *) textView NSLog (@ "textViewShouldEndEditing:"); textView.backgroundColor = [UIColor whiteColor]; devuelve SÍ;  - (void) textViewDidEndEditing: (UITextView *) textView NSLog (@ "textViewDidEndEditing:"); 

textViewShouldEndEditing: se llama justo antes la vista de texto se vuelve inactiva. textViewDidEndEditing: se llama cuando La vista de texto se vuelve inactiva. Son similares a los dos métodos a los que se llama cuando la vista de texto comienza a editarse, y cualquiera de los dos es un lugar apropiado para la lógica que se activa cuando el usuario termina de editar. En nuestro ejemplo, usamos textViewShouldEndEditing: para devolver el color de fondo a su color normal.

textView: shouldChangeCharactersInRange: replacementString

Agregue el siguiente código debajo de los métodos anteriores.

 - (BOOL) textView: (UITextView *) textView shouldChangeTextInRange: (NSRange) range replacementText: (NSString *) text NSCharacterSet * doneButtonCharacterSet = [NSCharacterSet newlineCharacterSet]; NSRange replacementTextRange = [text rangeOfCharacterFromSet: doneButtonCharacterSet]; NSUInteger location = replacementTextRange.location; if (textView.text.length + text.length> 140) if (location! = NSNotFound) [textView resignFirstResponder];  devuelve NO;  else if (location! = NSNotFound) [textView resignFirstResponder]; devuelve NO  devolver SÍ; 

Cada vez que un usuario escribe un carácter en el teclado, justo antes de que aparezca el carácter, el método textView: shouldChangeCharactersInRange: replacementString se llama. Esta es una ubicación útil para probar los caracteres que un usuario está escribiendo y no permite caracteres específicos que desee restringir. En nuestro ejemplo, usamos la tecla "Hecho" para renunciar al teclado probando si el texto de reemplazo contiene alguno de los caracteres en nuevoLineCharacterSet. Si es un personaje de la nuevoLineCharacterSet, entonces es el botón hecho que se ha presionado, y por lo tanto el teclado debe renunciar. Además, al probar la longitud actual de la vista de texto cada vez que se escribe un carácter y se devuelve NO Si tiene más de 140 caracteres, la vista de texto se limita a no más de 140 caracteres..

textViewDidChange:

Agregue el siguiente código debajo de los métodos anteriores.

 - (void) textViewDidChange: (UITextView *) textView NSLog (@ "textViewDidChange:"); 

El método textViewDidChange: se llama solo cuando el usuario cambia el texto en la vista de texto. Hay una variedad de comportamientos que le gustaría personalizar según el momento en que el usuario cambia el texto en la vista de texto. Una instancia es si tuviera que mostrar el número de caracteres restantes cuando una vista de texto está limitada a 140 caracteres. Cada vez que cambia el texto, se puede actualizar el número mostrado..

textViewDidChangeSelection:

Agregue el siguiente código debajo de los métodos anteriores.

 - (void) textViewDidChangeSelection: (UITextView *) textView NSLog (@ "textViewDidChangeSelection:"); 

El método textViewDidChangeSelection: se llama cuando se selecciona una sección de texto o se cambia la selección, como al copiar o pegar una sección de texto. Si bien este es probablemente uno de los métodos de delegado menos utilizados, en ciertas circunstancias puede ser beneficioso personalizar el comportamiento de la vista de texto cuando se selecciona el texto..


Paso 5: Probando las vistas de texto

Haga clic en Crear> Ejecutar, o haga clic en la flecha "Ejecutar" en la esquina superior izquierda. Abre la consola y explora la vista de texto. los NSLog en cada método se mostrará una cadena en la consola cuando se llame a ese método delegado.

Así es como aparece la vista de texto en el simulador:


Conclusión

Entendiendo cuando el UITextViewDelegate Se llaman los métodos de protocolo, puede aprovechar al máximo la funcionalidad incorporada al delegado. Si encuentra que un método de delegado no está ubicado en el lugar correcto en la interacción del usuario, pruebe un método diferente. En algún momento, encontrará el método correcto para colocar su lógica, haciendo que su aplicación funcione exactamente como lo desea.!