2013-10-24 6 views
10

Próbuję słuchać zmian dla prezentowanego kontrolera ViewViewer, ale nie wygląda na to, że ta właściwość jest zgodna z KVO (lub przynajmniej nie jestem w stanie uzyskać z niej zmian). Czy istnieje sposób w UIViewController do słuchania zmian, gdy aktywny jest UIViewController?shownViewController Zmiany KVO

+0

Czuje się jak zwyczaj powstrzymywania jest droga. Myśli? – user2916412

Odpowiedz

-6

Nie rozumiem dlaczego chcesz wiedzieć, czy instancja z UIViewController aktywnie przedstawiony za pomocą:

@property(nonatomic,readonly) UIViewController *presentedViewController; 

Ale hej, jesteś szefem. Myślę na przykład w kontrolerze widoku, który jest unikalny i powinien być prezentowany tylko raz, ale nie wiem, czy to pasuje do twoich kryteriów.

Myślę, że najlepszym sposobem jest użycie słowa instancji jest moja rada :), na przykład

w pliku nagłówka:

+ (MyViewController *)instance; 

w pliku źródłowym:

static MyViewController *instance = nil; 

@implementation MyViewController 

+ (MyViewController *)instance 
{ 
    return instance; 
} 


- (void)viewDidLoad 
{ 
    instance = self; 
    [super viewDidLoad]; 
    // ... 
} 

Z innych części aplikacji możesz teraz:

if ([[MyViewController instance] presentedViewController]) 
{ 
    // here I'm been presented 
} 
1

presentedViewController nie wydaje się być zgodny z KVO, ale jest to możliwe być powiadamiany o zmianach nadrzędnymi odpowiednich metod prezentacji/Oddalenie UIViewController:

override func presentViewController(viewControllerToPresent: UIViewController, animated flag: Bool, completion: (() -> Void)?) { 
    // will present view controller 
    super.presentViewController(viewControllerToPresent, animated: flag, completion: completion) 
} 

override func dismissViewControllerAnimated(flag: Bool, completion: (() -> Void)?) { 
    super.dismissViewControllerAnimated(flag, completion: completion) 
    // did dismiss view controller 
}