Containeransicht-Controller - benachrichtigen Sie die übergeordneten Aktionen

8

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.

    
soleil 19.02.2013, 22:00
quelle

3 Antworten

15

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%     
Eric Qian 19.02.2013, 22:19
quelle
10

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 ...

%Vor%

Dann in HomeViewController können Sie tun ...

%Vor%

HTH:)

    
Pedro 24.08.2013 16:43
quelle
3

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%     
samwize 16.02.2017 08:24
quelle