Tabelle von einem anderen UIViewController aktualisieren

7

Ich habe zwei View-Controller, von denen einer ( ViewController ) eine Tabelle namens tableView hat.

Ich möchte diese Tabelle von meinem anderen View-Controller ( pageView ) aktualisieren.

Ich habe das in pageView versucht:

%Vor%

Aber das funktioniert nicht.

Der Verbindungsweg zwischen den beiden View-Controllern ist ein Push-Segment

Was soll ich tun? Soll ich es über ein Storyboard-Segment tun?

    
maxisme 10.07.2014, 15:56
quelle

16 Antworten

18

Option 1

@ Klasse2

%Vor%

@ Klasse 1

%Vor%

* UPDATE:

Option 2

@ Klasse 2

%Vor%

@ Klasse 1

%Vor%     
emotality 27.07.2014, 17:18
quelle
3

/ * Fügen Sie diese Zeile in der viewDidLoad-Methode in ViewController hinzu (indem Sie diese Zeile verwenden, fügen Sie der ViewController-Klasse einen Beobachter hinzu) * /

%Vor%

/ * Fügen Sie diese Methode in der ViewController-Klasse hinzu (dieser Methodenaufruf, wenn Sie eine Benachrichtigung in pageView veröffentlichen) * /

%Vor%

/ * füge diese Zeile hinzu, wenn / wo du deine Zeile aktualisieren möchtest (diese Zeile nach der Benachrichtigung, die in ViewController hinzugefügt wurde) * /

%Vor%     
user2568615 01.08.2014 10:13
quelle
2

In ViewController1:

%Vor%

In ViewController2.m:

%Vor%     
LanWanMan 12.07.2014 04:10
quelle
2

Wenn der Second-View-Controller bereits geladen ist, können Sie NSNotification im Firstview-Controller verwenden. Diese Benachrichtigung ruft eine Methode im Second-View-Controller auf. Schreiben Sie in dieser Methode einen Code, um eine Tabellenansicht neu zu laden.

    
Neha 01.08.2014 07:38
quelle
1

Wenn ich das richtig verstanden habe, möchten Sie eine Tabellenansicht neu laden, die auf dem vorherigen View-Controller Ihres Navigationsstapels existiert. Ist dies der Fall, können Sie über die viewControllers -Eigenschaft des Navigationscontrollers darauf zugreifen.

%Vor%     
spassas 10.07.2014 16:18
quelle
1

Meistens passiert das, weil Sie den Verweis auf Ihren zweiten Controller nicht richtig initialisieren und er bleibt null. Muss so etwas sein.

%Vor%     
Nick Frolov 10.07.2014 17:21
quelle
1

Okay, um ein Beispiel zu nennen, rufen wir den vorherigen ViewController VC1 und den aktuellen ViewController VC2 auf.

Sie machen also einen Push-Übergang von VC1 zu VC2. Was Sie tun könnten, ist: Übergeben Sie einen Verweis der TableView auf VC2 während des Abschnitts. So würden Sie eine öffentliche UITableView-TblView-Variable in VC2 erstellen und dann in VC1 die prepareForSegue-Methode implementieren

%Vor%

Dann könnten Sie in VC2 einfach [tblView reloadData];

aufrufen

Stellen Sie nur sicher, dass Sie die tblView-Referenz nicht verwenden, wenn Sie mit VC2 fertig sind.

    
pnavk 10.07.2014 19:05
quelle
1

Sie können die Adresse von viewcontroller.tableview und refresh.tableView überprüfen und ich denke, sie würden nicht gleich sein; Sie können Singleton für den Viewcontroller erstellen und dann zum Beispiel

aufrufen %Vor%     
user2779060 27.07.2014 14:17
quelle
1

Erstellen Sie in Ihrer Seitenansicht eine Methode

%Vor%

Und benutze es dort, wo du es nennen willst

%Vor%     
Neprocker 27.07.2014 17:10
quelle
1
%Vor%

Wenn Sie den obigen Code sehen, weisen Sie ViewController instance nicht refresh zu. Wenn reloadData() ausgeführt wird, ist refresh gleich Null, so dass es offensichtlich auf keine Aktion reagiert.

%Vor%

Das würde funktionieren und der wichtigste Punkt, der hier zu beachten ist, ist Ihre Aktualisierung viewcontroller sollte die oberste Instanz im Stapel sein, da jede UI-Operation im Hauptthread stattfinden sollte.

    
Rajesh 30.07.2014 06:38
quelle
1

Verwenden Sie das NSnotification-Center, fügen Sie in diesem View-Controller einen Beobachter hinzu und schreiben Sie die Methode zum erneuten Laden der Tabelle. [self.tableView reloadData]; Und von der aktuellen Ansicht post benachrichtigen Sie diesen Beobachter.

    
user3279053 30.07.2014 07:02
quelle
1

Falls Sie alle Antworten ausprobiert haben, stellen Sie sicher, dass die dataSource vor dem erneuten Laden des tableView tatsächlich mit aktualisiert wird.

    
instaable 30.07.2014 09:37
quelle
1

Reloaddata muss innerhalb des ParentView-Controllers ausgeführt werden, da es die TableView-Delegate-Methoden aufruft, um die Tabelle wie CellForRowAtIndexpath und viele andere neu zu laden.  Das bedeutet, dass Sie im parentviewcontroller eine öffentliche Methode definieren müssen, die den Befehl reloaddata enthält, und sie über den untergeordneten Ansichtscontroller aufrufen.

public Methode:

Parentviewcontroller.h

%Vor%

parentviewcontroller.m

%Vor%

childviewcontroller.h

%Vor%

kindviewController.m

%Vor%     
Paulo 30.07.2014 15:21
quelle
1

Ich denke, das Problem ist, dass Ihre refresh Controller-Ansicht nicht geladen ist. Die reloadTable Nachricht geht also einfach auf null. Sie können erzwingen, dass ein View Controller seine Ansicht lädt, indem er view getter aufruft:

%Vor%

Überprüfen Sie also, ob Ihre tableView gleich Null ist, und wenn dies der Fall ist, initialisieren Sie sie mit der beschriebenen Methode.

    
kelin 31.07.2014 14:58
quelle
1

Als Make-up-Antwort auf Emoticals:

Wenn Sie die Startanimation überspringen möchten, setzen Sie einfach eine bool-Eigenschaft in Ihrem ClassTwoController , um zu überprüfen, ob diese Ansicht das erste Mal geladen wird

ClassTwoController.h:

%Vor%

ClassTwoController.m:

%Vor%

in deinem ClassOneController .m initialisiere es mit dem check bool:

%Vor%     
Wilson L 01.08.2014 08:18
quelle
1

Wenn Sie eine Parent-Child-Beziehung haben, können Sie dem Viewcontroller so eine schwache Eigenschaft hinzufügen

%Vor%

Wenn Sie die Tabelle neu laden müssen, rufen Sie einfach [parentController.tableView reloadData]

auf

Eine andere Möglichkeit wäre die Verwendung von NSNotificationCenter. Im Controller, den Sie neu laden möchten, sollten Sie die Benachrichtigung ( [[NSNotificationCenter defaultCenter] addObserver...] ) abonnieren und den Selektor implementieren, den Sie dieser Methode zur Verfügung stellen. In einem anderen Controller sollten Sie eine Benachrichtigung mit diesem Namen veröffentlichen.

Sie können auch auf viewWillAppear aktualisieren, wenn es Ihren Anforderungen entspricht.

    
Timur Kuchkarov 01.08.2014 08:32
quelle