Video: Cómo generar las claves API de YOUTUBE, MAPS y otras aplicaciones de GOOGLE 2024
Para que su funcionalidad de geocodificación funcione en su aplicación iOS, necesitará hacer varias cosas en el controlador Buscar. La mayoría de lo que necesita hacer gira en torno a obtener el texto que ingresa el usuario. También tendrá que tener el texto geocodificado y tener la ubicación geocodificada implementada como una Anotación por el objeto modelo Trip, que el controlador Find agregará al mapa.
Para acceder al texto, primero debe crear una salida para el campo Texto. Siga estos pasos:
-
Seleccione Main_iPad. guión gráfico en el navegador del proyecto.
-
Seleccione el controlador de vista maestra en el contorno del documento.
-
Seleccione el Asistente en el selector Editor, y si es MasterViewController. h archivo no aparece, desplácese hasta él utilizando la barra de Salto.
-
En el contorno del documento, abra el triángulo de revelación para la segunda sección Vista de tabla en el Controlador de vista maestra - Escena maestra para acceder a la celda Vista de tabla.
-
Abra la Celda de vista de tabla para mostrar la Vista de contenido que contiene la etiqueta Buscar y el texto.
-
Abre el triángulo de revelación de esa celda para mostrar el campo Texto y luego mantén presionado el control desde el campo Texto del estilo sin bordes hasta la interfaz del controlador Vista maestra (en el editor del Asistente) entre las interfaces del compilador @interface y -d, y agrega una salida llamada findText.
Esta es otra forma de crear la salida.
Un objeto UITextField es un control que muestra texto editable y envía un mensaje a su delegado cuando el usuario presiona la tecla Retorno. Por lo general, utiliza un objeto UITextField para permitir al usuario ingresar pequeñas cantidades de texto y luego hacer algo con él, como buscar algo o agregar un nuevo contacto.
Seleccione el campo Texto, seleccione el editor Estándar en el selector Editor en la barra de herramientas de Xcode, y luego abra el área de la Utilidad. Puede establecer una serie de propiedades del campo Texto en el inspector de Atributos.
¿Cómo sabría cuando el usuario ha ingresado algún texto? Además, ¿cómo se muestra el teclado y luego se oculta?
Cuando un usuario toca en un UITextField, se convierte en el primer respondedor y el teclado se eleva automáticamente para permitirle al usuario ingresar texto; no tiene que hacer nada para que eso suceda.
Cuando el usuario termine de ingresar texto, toca la tecla Volver: la tecla Retorno cuya etiqueta logró cambiar a Ir.
Cuando se toca la tecla Ir, el campo de texto determina si tiene un delegado y si el delegado ha implementado un método textFieldShouldReturn: uno de los métodos de protocolo UITextFieldDelegate opcionales.Si el delegado lo ha hecho, envía al delegado el mensaje textFieldShouldReturn: message. Entonces textFieldShouldReturn: es el lugar para capturar el texto.
Para capturar el texto y enviarlo al FindController, debe convertirse en el delegado del campo de texto e implementar el método textFieldShouldReturn:. Pero antes de hacer eso, necesita hacer una cosa más en Interface Builder.
Empieza por hacer que MasterViewController sea UITextFieldDelegate. Actualizar MasterViewController. h con el código en negrita para que adopte el protocolo UITextFieldDelegate.
#import @interface MasterViewController: UITableViewController @property (fuerte, no atómico) DetailViewController * detailViewController; @property (débil, no atómica) IBOutlet UITextField * findText; -d
El trabajo pesado se realizará en el método textFieldShouldReturn: delegate de TextField. Al delegado se le pasará el campo de Texto que se está editando como un argumento, y el controlador de Vista Maestra lo pasará al controlador Buscar.
Primero, debe actualizar la implementación de MasterViewController agregando el código en negrita a MasterViewController. metro.
#import "MasterViewController. H" #import "DetailViewController. H" #import "AppDelegate. H" #import "Trip. H " #import "FindController. H" @implementation MasterViewController
Tendrá que hacer que MasterViewController sea el delegado de textField. Para hacer eso, agregue el código en negrita para ver DidLoad en MasterViewController. metro.
- (void) viewDidLoad {[super viewDidLoad]; AppDelegate * appDelegate = [[UIApplication sharedApplication] delegado]; yo. title = appDelegate. viaje. nombre del destino; UIImageView * imageView = [[UIImageView alloc] initWithImage: [appDelegate. viaje destinationImage]]; yo. tableView. backgroundView = imageView; UISwipeGestureRecognizer * swipeGesture = [[UISwipeGestureRecognizer alloc] initWithTarget: acción propia: @selector (handleSwipeGesture:)]; gesto de deslizar. direction = UISwipeGestureRecognizerDirectionLeft; [yo. ver addGestureRecognizer: swipeGesture]; auto. buscar texto. delegar = auto; }
Ahora puede implementar el método textFieldShouldReturn: delegate agregando el código a MasterViewController. metro.
Notarás algunos errores de Issue en vivo aquí. Deberá agregar la propiedad findLocation al FindController.
- (BOOL) textFieldShouldReturn: (UITextField *) textField {[textField resignFirstResponder]; if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {FindController * findController = [[UIStoryboard storyboardWithName: @ "Main_iPad" bundle: nil] instantiateViewControllerWithIdentifier: @ "Find"]; findController. findLocation = textField. texto; DetailViewController * currentDetailViewController; currentDetailViewController = [self. splitViewController. viewControllers lastObject]; if (currentDetailViewController. masterPopoverController! = nil) [currentDetailViewController. masterPopoverController dismissPopoverAnimated: YES]; yo. splitViewController. delegate = findController; findController.popOverButton = currentDetailViewController. popOverButton; findController. masterPopoverController = currentDetailViewController. masterPopoverController; NSMutableArray * controllers = [NSMutableArray arrayWithObjects: (self. SplitViewController. ViewControllers) [0], findController, nil]; yo. splitViewController. viewControllers = controladores;} else {FindController * findController = [[UIStoryboard storyboardWithName: @ "Main_iPhone" bundle: nil] instantiateViewControllerWithIdentifier: @ "Find"]; findController. findLocation = textField. texto; [yo. navigationController pushViewController: findController animado: YES];} return YES;}
Lo primero que el código hace por usted es enviar un mensaje al campo de texto solicitando que renuncie como primera respuesta:
[textField resignFirstResponder];
Esto tiene el efecto secundario de descartar el teclado.
Lo que debes hacer a continuación es otro caso en el que lo que sucede depende de si tu aplicación se ejecuta en un iPad o iPhone.
Si está ejecutando en un iPad, crea una instancia de FindController desde Main_iPad. guión gráfico
FindController * findController = [[UIStoryboard storyboardWithName: @ "Main_iPad" bundle: nil] instantiateViewControllerWithIdentifier: @ "Find"];
A continuación, asigna el texto de textField a la propiedad findLocation FindLocation (que luego agregará al FindController).
findController. findLocation = textField. texto;
Luego descartas el popover.
DetailViewController * currentDetailViewController; currentDetailViewController = [self. splitViewController. viewControllers lastObject]; if (currentDetailViewController. masterPopoverController! = nil) [currentDetailViewController. masterPopoverController dismissPopoverAnimated: YES];
A continuación, asigna las propiedades popOverButton y masterPopoverController y hace que FindController sea el delegado del controlador Split View.
auto. splitViewController. delegate = findController; findController. popOverButton = currentDetailViewController. popOverButton; findController. masterPopoverController = currentDetailViewController. masterPopoverController;
Entonces simplemente hace que FindController sea el nuevo controlador de Vista de detalle en la propiedad viewControllers del controlador Split View.
NSMutableArray * controllers = [NSMutableArray arrayWithObjects: (self. SplitViewController. ViewControllers) [0], findController, nil]; yo. splitViewController. viewControllers = controladores;
Tenga en cuenta que, si se trata de un iPhone con el que está tratando, crea una instancia del FindController, asigne la propiedad findLocation y empújela en la pila del controlador de navegación, lo que hace que la vista se deslice en su lugar.
FindController * findController = [[UIStoryboardstoryboardWithName: @ "Main_iPhone" bundle: nil] instantiateViewControllerWithIdentifier: @ "Find"]; findController. findLocation = textField. texto; [yo. navigationController pushViewController: findController animado: SÍ];
Finalmente devuelve SÍ para que el campo de texto implemente su comportamiento predeterminado.