Ich habe eine Tab-Leisten-Anwendung mit vielen Ansichten. Gibt es eine Möglichkeit zu wissen, ob eine bestimmte UIViewController
Person derzeit in der UIViewController
Umgebung sichtbar ist ? (auf der Suche nach einer Immobilie)
ios
uiview
uiviewcontroller
uiwindow
Rob Bonner
quelle
quelle
Antworten:
Die Fenstereigenschaft der Ansicht ist nicht Null, wenn eine Ansicht derzeit sichtbar ist. Überprüfen Sie daher die Hauptansicht im Ansichts-Controller:
Durch Aufrufen der Ansichtsmethode wird die Ansicht geladen (sofern sie nicht geladen ist), was nicht erforderlich und möglicherweise unerwünscht ist. Es ist besser, zuerst zu überprüfen, ob es bereits geladen ist. Ich habe den Aufruf von isViewLoaded hinzugefügt, um dieses Problem zu vermeiden.
Seit iOS9 ist es einfacher geworden:
Wenn Sie einen UINavigationController haben, der die Ansichtscontroller verwaltet, können Sie stattdessen die Eigenschaft visibleViewController überprüfen .
quelle
topViewController
.Hier ist die Lösung von @progrmr als
UIViewController
Kategorie:quelle
Bei den oben genannten Lösungen gibt es einige Probleme. Wenn Sie beispielsweise a verwenden
UISplitViewController
, gibt die Masteransicht immer true für zurückVerwenden Sie stattdessen diesen einfachen Ansatz, der in den meisten, wenn nicht allen Fällen gut zu funktionieren scheint:
quelle
Für diejenigen unter Ihnen, die nach einer Swift 2.2- Version der Antwort suchen :
und Swift 3 :
quelle
Bei einer modalen Darstellung im Vollbildmodus oder im Kontext kann "sichtbar" bedeuten, dass sie sich über dem Stapel des Ansichtscontrollers befindet oder nur sichtbar ist, aber von einem anderen Ansichtscontroller abgedeckt wird.
Um zu überprüfen, ob der Ansichts-Controller "der Draufsicht-Controller ist" sich stark von "sichtbar" unterscheidet, sollten Sie den Ansichts-Controller-Stapel des Navigations-Controllers des Ansichts-Controllers überprüfen.
Ich habe einen Code geschrieben, um dieses Problem zu lösen:
quelle
isViewLoaded
ist eine Eigenschaft seit Swift 3.0.Sie möchten die verwenden
UITabBarController
‚s -selectedViewController
Eigenschaft. Alle an einen Registerkarten-Controller angehängten Ansichts-Controller verfügen über einentabBarController
Eigenschaftssatz, sodass Sie in jedem Code der Ansichts-Controller Folgendes tun können:quelle
((UINavigationController *)self.tabBarController.selectedViewController).visibleViewController
Ich habe eine schnelle Erweiterung basierend auf der Antwort von @progrmr vorgenommen.
Damit können Sie einfach überprüfen, ob a wie
UIViewController
folgt auf dem Bildschirm angezeigt wird:Die Erweiterung:
quelle
Für meine Zwecke habe ich das im Kontext eines Container View Controllers gefunden
funktioniert gut.
quelle
Wenn Sie einen UINavigationController verwenden und auch modale Ansichten verarbeiten möchten, verwende ich Folgendes:
quelle
Der Ansatz, den ich für einen modalen Controller für präsentierte Ansichten verwendet habe, bestand darin, die Klasse des präsentierten Controllers zu überprüfen. Wenn der vorgestellte View Controller
ViewController2
wäre, würde ich Code ausführen.quelle
Ich habe diese Funktion in gefunden
UIViewController.h
.Möglicherweise können die oben genannten Funktionen erkennen, ob das angezeigt
ViewController
wird oder nicht.quelle
XCode 6.4, für iOS 8.4, ARC aktiviert
Offensichtlich viele Möglichkeiten, dies zu tun. Derjenige, der für mich gearbeitet hat, ist der folgende ...
Dies kann in jedem View Controller auf folgende Weise verwendet werden:
Wenn Sie diese Eigenschaft in aufrufen, erhalten
-(void)viewDidLoad
Sie 0, und wenn Sie dies aufrufen, nachdem-(void)viewDidAppear:(BOOL)animated
Sie 1 erhalten haben.Hoffe das hilft jemandem. Vielen Dank! Prost.
quelle
Wenn Sie einen Navigationscontroller verwenden und nur wissen möchten, ob Sie sich im aktiven und obersten Controller befinden, verwenden Sie:
Diese Antwort basiert auf dem Kommentar von @mattdipasquale .
Wenn Sie ein komplizierteres Szenario haben, lesen Sie die anderen Antworten oben.
quelle
Sie können es durch
window
Eigenschaft überprüfenquelle
Ich brauchte dies, um zu überprüfen, ob der Ansichts-Controller der aktuell angezeigte Controller ist. Ich habe dies getan, indem ich überprüft habe, ob ein Ansichts-Controller angezeigt oder durch den Navigator geschoben wurde. Ich poste ihn, falls jemand eine solche Lösung benötigt:
quelle
Ich verwende diese kleine Erweiterung in Swift 5 , mit der es einfach und leicht ist, nach Objekten zu suchen , die Mitglied von UIView sind .
Dann benutze ich es einfach als einfache if-Anweisungsprüfung ...
Ich hoffe, es hilft! :) :)
quelle