640 Stimmen

Wie man feststellt, ob die Ansicht des UIViewControllers sichtbar ist

Ich habe eine Registerkartenanwendung mit vielen Ansichten. Gibt es eine Möglichkeit zu wissen, ob eine bestimmte UIViewController ist derzeit von der Website aus sichtbar UIViewController ? (auf der Suche nach einer Immobilie)

0 Stimmen

4voto

AechoLiu Punkte 16630

Ich fand diese Funktion in UIViewController.h .

/*
  These four methods can be used in a view controller's appearance callbacks to determine if it is being
  presented, dismissed, or added or removed as a child view controller. For example, a view controller can
  check if it is disappearing because it was dismissed or popped by asking itself in its viewWillDisappear:
  method by checking the expression ([self isBeingDismissed] || [self isMovingFromParentViewController]).
*/

- (BOOL)isBeingPresented NS_AVAILABLE_IOS(5_0);
- (BOOL)isBeingDismissed NS_AVAILABLE_IOS(5_0);

- (BOOL)isMovingToParentViewController NS_AVAILABLE_IOS(5_0);
- (BOOL)isMovingFromParentViewController NS_AVAILABLE_IOS(5_0);

Vielleicht können die oben genannten Funktionen die ViewController erschienen ist oder nicht.

4voto

serge-k Punkte 3244

XCode 6.4, für iOS 8.4, ARC aktiviert

Offensichtlich gibt es viele Möglichkeiten, dies zu tun. Für mich hat sich die folgende Methode bewährt...

@property(nonatomic, readonly, getter=isKeyWindow) BOOL keyWindow

Dies kann in jedem View-Controller auf folgende Weise verwendet werden,

[self.view.window isKeyWindow]

Wenn Sie diese Eigenschaft in -(void)viewDidLoad erhalten Sie 0, und wenn Sie dies nach -(void)viewDidAppear:(BOOL)animated erhalten Sie 1.

Ich hoffe, das hilft jemandem. Danke! Zum Wohl.

3voto

wigging Punkte 7434

Der Ansatz, den ich für einen modal präsentierten View-Controller verwendet habe, bestand darin, die Klasse des präsentierten Controllers zu überprüfen. Wenn der präsentierte View-Controller ViewController2 dann würde ich einen Code ausführen.

UIViewController *vc = [self presentedViewController];

if ([vc isKindOfClass:[ViewController2 class]]) {
    NSLog(@"this is VC2");
}

3voto

MrTristan Punkte 731

Wenn Sie einen UINavigationController verwenden und auch modale Ansichten behandeln möchten, ist das folgende, was ich verwende:

#import <objc/runtime.h>

UIViewController* topMostController = self.navigationController.visibleViewController;
if([[NSString stringWithFormat:@"%s", class_getName([topMostController class])] isEqualToString:@"NAME_OF_CONTROLLER_YOURE_CHECKING_IN"]) {
    //is topmost visible view controller
}

2 Stimmen

Ich habe festgestellt, dass dieser Weg zuverlässiger ist als die übliche Antwort, wenn ein Navigationscontroller verfügbar ist. Dies kann verkürzt werden zu:if ([self.navigationController.visibleViewController isKindOfClass:[self class]]) {

3voto

phatmann Punkte 17730

Wenn Sie einen Navigationscontroller verwenden und nur wissen wollen, ob Sie sich in der aktiv y oberste Controller, dann verwenden:

if navigationController?.topViewController == self {
    // Do something
}

Diese Antwort stützt sich auf @mattdipasquale Kommentar.

Wenn Sie ein komplizierteres Szenario haben, lesen Sie die anderen Antworten oben.

0 Stimmen

Wird nie aufgerufen, wenn die Anwendung in den Hintergrund und dann in den Vordergrund geht. Ich bin auf der Suche nach einer Lösung, bei der ich überprüfen kann, ob der Viewcontroller für den Benutzer sichtbar ist oder nicht. Der Benutzer könnte die App für ein paar Tage in den Hintergrund stellen und wenn sie wieder in den Vordergrund kommt, möchte ich die Benutzeroberfläche aktualisieren. Bitte lassen Sie mich wissen, wenn Sie helfen können.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X