Ios 如何确定何时调用了对象的方法?
我有一个Ios 如何确定何时调用了对象的方法?,ios,swift,Ios,Swift,我有一个UIViewController对象。 我想知道什么时候调用了viewDidLoad方法 我知道我可以在子类中重写此方法,并确定何时调用它 调用viewDidLoad方法时,是否还有其他方法需要知道 编辑- 我有几个视图控制器被推到UINavigationController上。 其中一些视图控制器隐藏导航栏。这可以使用给出的答案来完成 覆盖函数视图将出现(动画:Bool){ self.navigationController?.setNavigationBarHidden(真,动画:动
UIViewController
对象。
我想知道什么时候调用了viewDidLoad
方法
我知道我可以在子类中重写此方法,并确定何时调用它
调用viewDidLoad
方法时,是否还有其他方法需要知道
编辑-
我有几个视图控制器被推到UINavigationController
上。
其中一些视图控制器隐藏导航栏。这可以使用给出的答案来完成
覆盖函数视图将出现(动画:Bool){
self.navigationController?.setNavigationBarHidden(真,动画:动画)
超级。视图将显示(动画)
}
覆盖功能视图将消失(动画:Bool){
self.navigationController?.setNavigationBarHidden(错误,动画:动画)
超级。视图将消失(动画)
}
目前,我已经在许多视图控制器中重复了这段代码
我试图消除代码的重复
一种方法是创建一个包含此代码的超类,并使用视图控制器隐藏导航栏子类这个超类。但是,某些隐藏导航栏的视图控制器从UITableViewController
和UICollectionViewController
下降
我正在尝试创建一个类,该类将观察在视图控制器上调用
视图何时出现(:)
和视图何时消失(:)
,然后调用该方法来隐藏和显示导航栏。您试图实现的功能可以通过在旧的忠实的Objective-C中实现
进入您的Xcode:
#导入“UIViewController+Lifecycle.h”
UIViewController+Lifecycle.h
应该如下所示:AppDelegate的
didFinishLaunching方法中,比如:ViewController.setViewControllerSwizzlingActive(true)
如果您想要Swift版本,这将是您的一项任务。您尝试过使用吗?否则,关于UIViewController的生命周期有一个很好的线索。您也说过,您可以重写该方法,然后使用断点检查何时调用它。为什么您需要知道这一点?答案可能不同。@AlekseyPotapov断点不能使用,因为它不是用于调试,而是用于在程序运行时执行操作。
#import <UIKit/UIKit.h>
@interface UIViewController (Lifecycle)
+ (void)setViewControllerSwizzlingActive:(BOOL)wantedState;
@end
#import <objc/runtime.h>
#import "UIViewController+Lifecycle.h"
@implementation UIViewController (Lifecycle)
+ (void)setViewControllerSwizzlingActive:(BOOL)wantedState
{
static BOOL isWorkaroundActive = NO;
if (isWorkaroundActive != wantedState)
{
[self exchangeViewWillAppearMethod];
[self exchangeViewWillDisappearMethod];
isWorkaroundActive = wantedState;
}
}
+ (void)exchangeViewWillAppearMethod
{
Method original = class_getInstanceMethod(self, @selector(viewWillAppear:));
Method fake = class_getInstanceMethod(self, @selector(fakeViewWillAppear:));
method_exchangeImplementations(original, fake);
}
+ (void)exchangeViewWillDisappearMethod
{
Method original = class_getInstanceMethod(self, @selector(viewWillDisappear:));
Method fake = class_getInstanceMethod(self, @selector(fakeViewWillDisappear:));
method_exchangeImplementations(original, fake);
}
- (void)fakeViewWillAppear:(BOOL *)animated
{
[self.navigationController setNavigationBarHidden:YES animated:animated];
return [self fakeViewWillAppear:animated];
}
- (void)fakeViewWillDisappear:(BOOL *)animated
{
[self.navigationController setNavigationBarHidden:NO animated:animated];
return [self fakeViewWillDisappear:animated];
}
@end