Представленные измененияViewController KVO

Я пытаюсь прослушать изменения для представленногоViewController, но не похоже, что это свойство соответствует KVO (или, по крайней мере, я не могу получить от него изменения). Есть ли способ в UIViewController прослушивать изменения при активном представлении UIViewController?

Ответ 1

presentedViewController не является KVO-совместимым, но можно получать уведомления об изменениях, переопределяя соответствующие методы презентации/увольнения 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
}

Ответ 2

Я не понимаю, почему вы хотите узнать, активно ли активен экземпляр UIViewController, используя:

@property(nonatomic,readonly) UIViewController *presentedViewController;

Но эй, ты босс. Я думаю, например, в контроллере представлений, который уникален и должен быть представлен только один раз, но я не знаю, соответствует ли это вашим критериям.

Я думаю, что лучший способ: использовать экземпляр слова - это мой совет:), например

В файле заголовка:

+ (MyViewController *)instance;

В исходном файле:

static MyViewController *instance = nil;

@implementation MyViewController

+ (MyViewController *)instance
{
    return instance;
}


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

Теперь из других частей приложения вы можете:

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