oc中如何在外部得知viewcontroller调用viewWillAppear的时机
在Objective-C中,想要在外部得知ViewController调用viewWillAppear方法的时机,可以通过以下两种方式实现:
-
使用KVO观察
viewWillAppear方法的调用:- 在需要观察的类中添加观察者,并在
viewWillAppear方法中发送通知:- (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [[NSNotificationCenter defaultCenter] postNotificationName:@"ViewControllerWillAppearNotification" object:nil]; } - 在外部的类中添加观察者,观察
ViewControllerWillAppearNotification通知:[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(viewControllerWillAppear:) name:@"ViewControllerWillAppearNotification" object:nil]; - 在观察者类中实现
viewControllerWillAppear:方法,该方法会在viewWillAppear方法调用时被调用:- (void)viewControllerWillAppear:(NSNotification *)notification { // 在这里处理viewWillAppear方法调用的逻辑 }
- 在需要观察的类中添加观察者,并在
-
使用代理模式:
- 在ViewController类中定义一个代理协议,并声明一个代理属性:
@protocol ViewControllerDelegate <NSObject> - (void)viewControllerWillAppear; @end @interface ViewController : UIViewController @property (nonatomic, weak) id<ViewControllerDelegate> delegate; @end - 在
viewWillAppear方法中调用代理方法:- (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; if ([self.delegate respondsToSelector:@selector(viewControllerWillAppear)]) { [self.delegate viewControllerWillAppear]; } } - 在外部的类中遵循代理协议,并实现代理方法,即可在
viewWillAppear方法调用时被调用:@interface ExternalClass : NSObject <ViewControllerDelegate> @end @implementation ExternalClass - (void)viewControllerWillAppear { // 在这里处理viewWillAppear方法调用的逻辑 } @end ``
- 在ViewController类中定义一个代理协议,并声明一个代理属性:
原文地址: http://www.cveoy.top/t/topic/hU48 著作权归作者所有。请勿转载和采集!