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.

iOS: Transferir datos desde Swift a un controlador de ObjC utilizando protocolo y delegado

Estoy intentando pasar datos desde Swift VC2 a ObjC VC1 utilizando delegados mientras se cierra, a continuación se muestra mi código.

VC2 (swift)

“`swift
//protocolo utilizado para enviar datos de regreso
@objc protocol DataEnteredDelegate: AnyObject {
func userDidEnterInformation(info: String)
}

class VC2: UIViewController {

weak var delegate: DataEnteredDelegate? = nil

// Volver a VC1
@IBAction func doneBtn(_ sender: Any) {
session.stop();
delegate!.userDidEnterInformation(info: “enviando datos desde Swift VC2”)
self.dismiss(animated: true, completion: nil)
}

}

VC1.m (objc)

#import “ProjectName-Swift.h”

@interface VC1 ()

@end

@implementation VC1

// Navegar a VC2
-(void)goToVC2 {
VC2 *vc2 = [[UIStoryboard storyboardWithName: @”Main” bundle:nil] instantiateViewControllerWithIdentifier:@”VC2ID”];
[self presentViewController: vc2 animated: YES completion: nil];
}

// Asignar el delegado en VC1 antes de pasar a VC2 e implementar el protocolo en el archivo VC1 (objc) es decir DataEnteredDelegate y la función userDidEnterInformation.
@end

VC1.h (objc)
@interface VC1 : UIViewController

@end

Creo que he completado la parte de Swift de la tarea, pero estoy buscando la implementación en Objc.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para asignar el delegado en VC1 antes de pasar a VC2, primero debes importar el archivo de encabezado Swift en tu archivo VC1.m:

    #import "ProjectName-Swift.h"
    

    Luego, al instanciar VC2, debes asignarle el delegado:

    VC2 *vc2 = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"VC2ID"];
    vc2.delegate = self;
    [self presentViewController:vc2 animated:YES completion:nil];
    

    Esto permitirá que VC2 llame a la función userDidEnterInformation cuando se ingrese información.

    Para implementar DataEnteredDelegate en tu archivo VC1.h, agrega este código:

    @interface VC1 : UIViewController <dataentereddelegate>
    
    @end
    

    Luego, en tu archivo VC1.m, agrega la implementación para la función userDidEnterInformation:

    - (void)userDidEnterInformationWithInfo:(NSString *)info {
        NSLog(@"Se recibieron los datos de VC2: %@", info);
        // Haz lo que necesites hacer con los datos aquí
    }
    

    Esta función será llamada por VC2 cuando se devuelvan los datos, y podrás usarla para procesar los datos según sea necesario.

Comments are closed.