我知道这样做的一种方法。那就是" viewDidLoad"将在场景发生变化时调用。还有其他方法可以检测故事板中场景何时发生变化,因为我希望在场景发生变化时调用一种方法。我正在为ios应用程序开发SDK我不能要求应用程序开发人员在每个场景上调用方法(我想改进它),所以我想在场景发生变化时自动检测并在那里调用我的方法。请帮助我们正在尝试从这么多天来做这件事,但没有找不到任何关于它的事情。
答案 0 :(得分:-1)
你需要做的就是调动UIKit的-[UIViewController viewDidLoad]
方法,
所以你需要做3个步骤
-[UIViewController viewDidLoad]
来电-[UIViewController viewDidLoad]
方法以下是您问题的完整解决方案
1)UIViewController类上名为“Initialization”的Crate类别
2)复制下面的代码
3)在// Your init here
#import <objc/runtime.h>
@implementation UIViewController (Initialization)
+ (void)load
{
swizzleInstance(@selector(viewDidLoad),
@selector(viewDidLoad_m),
[UIViewController class],
[self class]);
}
static void swizzleInstance(SEL originalSl, SEL swizzledSl, Class originalCl, Class swizzledCl) {
Method originalMethod = class_getInstanceMethod(originalCl, originalSl);
Method swizzledMethod = class_getInstanceMethod(swizzledCl, swizzledSl);
method_exchangeImplementations(originalMethod, swizzledMethod);
}
- (void)viewDidLoad_m
{
[self viewDidLoad_m];
// Your init here
}
答案 1 :(得分:-1)
viewDidLoad仅在第一次显示视图时被调用。如果你保持视图控制器然后返回它,那么它将不会被再次调用。 (对于Storyboard,大多数人只是在用户关闭它时丢弃一个视图控制器,然后在返回时重新创建它,所以这可能不是问题,但重要的是要注意它。)
我会建议反对方法调整,如另一张海报所建议的那样。
相反,您可能会考虑为所有视图控制器创建自定义基类。在该基类中实现viewWillAppear和viewWillDisappear方法。在这些方法中,您可以广播通知或发送其他类型的消息,以便跟踪视图控制器的显示/解除。
实现viewWillAppear:animated或viewWillDisappear:animated的所有视图控制器都应该调用super,因此子类仍然应该调用这些方法的超级版本。
答案 2 :(得分:-1)
viewDidLoad
并不表示您的场景已完全切换。请考虑以下事项:
UIViewController *myViewController = [[UIViewController alloc] init];
[myViewController.view addSubview:someView]; // viewDidLoad is called as a result of accessing the view property here
myViewController = nil; // the view controller is thrown away and the scene is never changed.
相反,您应该使用viewWillAppear:
,viewDidAppear:
,viewWillDisappear:
和viewDidDisappear:
。这些都是UIViewController
子类可以覆盖的方法。