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

28voto

executor21 Punkte 4432

Sie möchten die UITabBarController 's selectedViewController Eigentum. Alle View-Controller, die mit einem Tabbar-Controller verbunden sind, haben eine tabBarController Eigenschaft festgelegt, so dass Sie von jedem Code des View-Controllers aus die Möglichkeit haben:

if([[[self tabBarController] selectedViewController] isEqual:self]){
     //we're in the active controller
}else{
     //we are not
}

2 Stimmen

Dies funktioniert nicht, wenn der View-Controller in einem Navigations-Controller enthalten ist und dieser Controller dem Tabbar-Controller hinzugefügt wird. Der Aufruf von selectedViewController gibt den Navigations-Controller und nicht den aktuellen View-Controller zurück.

2 Stimmen

@AntonHolmberg in diesem Fall, erhalten Sie die sichtbare Ansicht Controller wie folgt: ((UINavigationController *)self.tabBarController.selectedViewController).visibleViewC‌​ontroller

0 Stimmen

Oder verwenden Sie sogar die Eigenschaft "self.tabBarController.selectedIndex", wenn wir so weit gegangen sind.

14voto

Besi Punkte 22262

Ich habe eine schnelle Erweiterung auf der Grundlage der Antwort von @progrmr vorgenommen.

Damit können Sie leicht überprüfen, ob ein UIViewController ist auf dem Bildschirm wie folgt zu sehen:

if someViewController.isOnScreen {
    // Do stuff here
}

Die Verlängerung:

//
//  UIViewControllerExtension.swift
//

import UIKit

extension UIViewController{
    var isOnScreen: Bool{
        return self.isViewLoaded() && view.window != nil
    }
}

7voto

Chris Prince Punkte 6870

Für meine Zwecke, im Zusammenhang mit einem Container-View-Controller, habe ich festgestellt, dass

- (BOOL)isVisible {
    return (self.isViewLoaded && self.view.window && self.parentViewController != nil);
}

funktioniert gut.

6voto

valbu17 Punkte 3874

Ich verwende diese kleine Erweiterung in Mauersegler 5 die es einfach und leicht macht, nach jedem Objekt zu suchen, das Mitglied von UIView .

extension UIView {
    var isVisible: Bool {
        guard let _ = self.window else {
            return false
        }
        return true
    }
}

Dann verwende ich es einfach als eine einfache if-Anweisung...

if myView.isVisible {
    // do something
}

Ich hoffe, es hilft! :)

5voto

dimpiax Punkte 10754

Guter Punkt, dass die Ansicht angezeigt wird, wenn sie bereits in der Fensterhierarchie enthalten ist. So können wir unsere Klassen für diese Funktionalität erweitern.

extension UIViewController {
  var isViewAppeared: Bool { viewIfLoaded?.isAppeared == true }
}

extension UIView {
  var isAppeared: Bool { window != nil }
}

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