Я пытаюсь прослушать изменения для представленногоViewController, но не похоже, что это свойство соответствует KVO (или, по крайней мере, я не могу получить от него изменения). Есть ли способ в UIViewController прослушивать изменения при активном представлении UIViewController?
Представленные измененияViewController KVO
Ответ 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
}