如何为 objective-c 中的所有加载视图调用一个函数?
How to call a function for all views on load in objective-c?
我有一个单例,它有一个函数-(void)repair;
我可以在 viewDidLoad 的每个视图控制器中编写 [Manager repair];
,但是由于我有很多视图控制器,我希望自动调用该函数而不必手动编写 。
这可能吗,或者此方法所需的代码将比在每个视图中调用该方法花费更长的时间?
注意:我想这样做的原因是能够在我需要的任何时候启用和禁用该功能,而不必返回并从每个视图中删除它。
我看到有两种方法可以做到这一点:
- 创建 UIViewController 的子class 并在其中实施修复 class 并让 classes viewDidLoad 调用 self.repair。如果您混合使用 UIViewControllers、UITableViewControllers 和 UICollectionView 控制器,您可能需要对每个控制器进行 subclass。然后让每个视图控制器扩展 subclass 而不是直接扩展 UIViewController 。然后确保您在 viewDidLoad 中调用 super.viewDidLoad(无论如何您都应该这样做)
- 方法调配 viewDidLoad,但这可能会很快变得丑陋。
您可以调整 UIViewController viewDidLoad 方法并将修复调用放在那里。
看看http://nshipster.com/method-swizzling/
我有一个单例,它有一个函数-(void)repair;
我可以在 viewDidLoad 的每个视图控制器中编写 [Manager repair];
,但是由于我有很多视图控制器,我希望自动调用该函数而不必手动编写 。
这可能吗,或者此方法所需的代码将比在每个视图中调用该方法花费更长的时间?
注意:我想这样做的原因是能够在我需要的任何时候启用和禁用该功能,而不必返回并从每个视图中删除它。
我看到有两种方法可以做到这一点:
- 创建 UIViewController 的子class 并在其中实施修复 class 并让 classes viewDidLoad 调用 self.repair。如果您混合使用 UIViewControllers、UITableViewControllers 和 UICollectionView 控制器,您可能需要对每个控制器进行 subclass。然后让每个视图控制器扩展 subclass 而不是直接扩展 UIViewController 。然后确保您在 viewDidLoad 中调用 super.viewDidLoad(无论如何您都应该这样做)
- 方法调配 viewDidLoad,但这可能会很快变得丑陋。
您可以调整 UIViewController viewDidLoad 方法并将修复调用放在那里。 看看http://nshipster.com/method-swizzling/