Ich weiß, dass diese Frage wurde hier mehrmals gestellt und beantwortet. Aber ich habe es zum ersten Mal mit diesem Ding zu tun und kann es immer noch nicht perfekt umsetzen. Hier ist der Code Ich habe die Delegate-Methode, die ich implementieren, um Daten von SecondViewController
zu FirstViewController
zu übergeben.Übergeben von Daten zwischen 2 UIViewController mit Delegaten und Protokoll
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
Bin ich es richtig gemacht? Alles was ich will ist es die Daten in self.dataInSecondViewController
an FirstViewController
zu senden und dort in der NSArray
Eigenschaft sampleData
von FirstViewController
zu speichern.
Irgendwie kann ich sendDataBackToFirstController
in FirstViewController
nicht zugreifen. Welche anderen Dinge vermisse ich, um dort auf sendDataBackToFirstController
zuzugreifen?
Sie müssen die erste vc als Delegierter setzen zweite vc. Daher muss die Delegate-Methode von second vc in der ersten vc implementiert werden. Rufen Sie dann die Methode von second vc auf, wenn das Ereignis ausgelöst wird. Aus Ihrem Szenario ist unklar, ob Sie eine Datenquelle oder einen Delegaten haben möchten. Wenn Sie eine zweite VC als Datenquelle für die erste VC verwenden, ist dies die erste VC, die Daten anfordert. Aber Sie wollen nur den Wert zurück auf die erste vc zurückgeben, wenn ein Ereignis in der zweiten vc auftritt, dann seine Art von Delegaten. Dann müssten Sie den Rückgabetyp auf void ändern und die Daten als Argument übergeben. – Anupdas
Korrigieren. Ich habe versucht, controller.delegate = self in didSelectRow ... meiner ersten vc. Aber irgendwie Controller ist nicht in der Lage, das Delegat-Objekt zu finden. Scheint mein Code bis jetzt korrekt? –
Bitte folgen Sie den Antworten von @gdavis und Kunst – Anupdas