Angenommen, ich habe einen benutzerdefinierten Controller für die Containeransicht (MainViewController), in dem ich Folgendes mache:
%Vor%Der HomeViewController verfügt über eine Taste, z. B. "go", die bei Betätigung zum nächsten View-Controller wechseln muss. Also muss ich den MainViewController von dieser Aktion benachrichtigen. Was ist der beste Weg, dies zu tun?
Ich verwende einen benutzerdefinierten Container, weil ich benutzerdefinierte Übergänge zwischen den View-Controllern vornehmen muss. Wenn "go" gedrückt wird, werden einige Ansichten des HomeViewControllers animiert, während die Ansichten des neuen View-Controllers animiert werden.
Offensichtlich könnte ich dem HomeViewController eine Eigenschaft vom Typ MainViewController geben und Aufrufe auf diese Weise machen, aber ich hoffe, dass es eine sauberere Methode mit der Container-View-Controller-API gibt.
Sie können entweder delegieren oder blockieren;
Delegate verwenden
Erstellen Sie ein Protokoll:
%Vor%Deklarieren Sie einfach einen Delegaten in HomeViewController.h wie folgt:
%Vor%und dann im ViewDidLoad von MainViewController:
%Vor%Wenn Sie die Taste in homeVC drücken, rufen Sie einfach:
%Vor%Block verwenden :
Deklarieren Sie in HomeViewController.h eine Blockeigenschaft:
%Vor%dann in MainViewController ViewDidLoad:
%Vor%Wenn Sie die Taste in homeVC drücken, rufen Sie einfach:
%Vor% Es gibt noch einen anderen Weg ...
Jeder View-Controller hat eine parentViewController
-Eigenschaft, so dass Sie dies verwenden können ...
In MainViewController
definieren Sie eine Methode für die Aktion, die Sie ausführen möchten ...
Dann in HomeViewController
können Sie tun ...
HTH:)
Dies ist ein sehr häufiges Muster. Die übergeordnete Instanz wird die tatsächliche Instanz sein, die die Aktion durchführt, indem sie eine protocol
und eine bereitstellt Standarderweiterung
In Swift 3:
Übergeordnete Ansichtssteuerung:
%Vor%Kindersicht-Controller:
%Vor%Tags und Links ios uiviewcontroller parentviewcontroller childviewcontroller