So che questa domanda è stata fatta e ho risposto molte volte qui. Ma mi sto occupando di questa cosa per la prima volta e ancora non riesco a ottenere la perfetta implementazione di ciò nella mia mente. Ecco il codice Ho il metodo delegato che implemento per passare i dati da SecondViewController
a FirstViewController
.Passaggio di dati tra 2 UIViewController utilizzando delegato e protocollo
FirstViewController.h
#import "SecondViewController.h"
@interface FirstViewController : UITableViewController<sampleDelegate>
@end
FirstViewController.m
@interface FirstViewController()
// Array in which I want to store the data I get back from SecondViewController.
@property (nonatomic, copy) NSArray *sampleData;
@end
@implementation FirstViewController
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
SecondViewController *controller = [[SecondViewController alloc] init];
[self.navigationController pushViewController:controller animated:YES];
}
@end
SecondViewController.h
@protocol sampleDelegate <NSObject>
- (NSArray*)sendDataBackToFirstController;
@end
@interface SecondViewController : UITableViewController
@property (nonatomic, strong) id <sampleDelegate> sampleDelegateObject;
@end
SecondViewController.m
@interface SecondViewController()
@property (strong, nonatomic) NSArray *dataInSecondViewController;
@end
@implementation SecondViewController
- (void)viewDidLoad
{
[super viewDidLoad];
self.dataInSecondViewController = [NSArray arrayWithObjects:@"Object1", @"Object2", nil];
}
- (NSArray*)sendDataBackToFirstController
{
return self.dataInSecondViewController;
}
@end
sto facendo correttamente? Tutto ciò che voglio è inviare i dati in self.dataInSecondViewController
a FirstViewController
e memorizzarli nella proprietà NSArray
sampleData
di FirstViewController
.
In qualche modo non riesco ad accedere a sendDataBackToFirstController
in FirstViewController
. Quali altre cose mi manca implementando per accedere a sendDataBackToFirstController
lì?
È necessario impostare la prima vc come delegato seconda vc. Quindi il metodo delegato di seconda vc deve essere implementato in first vc. Quindi invoca il metodo dalla seconda vc quando viene attivato l'evento. Dal tuo scenario non è chiaro se vuoi avere un'origine dati o un delegato. Se si usa la seconda vc come origine dati per la prima vc, è la prima vc che richiede i dati. Ma vuoi solo restituire il valore alla prima vc quando qualche evento accade nella seconda vc quindi il suo tipo di delegato. Quindi dovresti modificare il tipo di ritorno in null e passare i dati come argomento. – Anupdas
corretto. Ho provato a fare controller.delegate = self in didSelectRow ... del mio First vc. Ma in qualche modo il controller non è in grado di trovare l'oggetto delegato. Il mio codice sembra essere corretto finora? –
Si prega di seguire le risposte di @gdavis e art – Anupdas