在所有 ViewController 中执行一个方法
Posted
技术标签:
【中文标题】在所有 ViewController 中执行一个方法【英文标题】:execute a method in all the ViewControllers 【发布时间】:2014-01-28 07:47:55 【问题描述】:也许这是不可能的,但这是我的问题:
我需要在所有ViewController
s 上执行相同的方法,确切地说是在viewDidLoad
或viewDidAppear
方法上。
除了从每个控制器调用此函数之外,AppDelegate
或其他地方有什么办法吗?
【问题讨论】:
在appdelegate中声明和定义方法,并在制作appdelegate的对象后调用它或另一种方式使另一个类通用,并在导入和制作它的对象后声明和定义方法并调用 【参考方案1】:试试这个,
创建一个BaseViewController
@interface BaseViewController : UIViewController
并通过子类化BaseViewController
创建所有其他ViewControllers
@interface AViewController : BaseViewController
并在viewDidLoad
或BaseViewController
的viewDidAppear
上做你的事情
【讨论】:
【参考方案2】:这是一个简单的方法来做到这一点。遵循 OOPS 并像这样使用继承。
例如,制作一个 baseViewController 并添加两个方法。
btBaseViewController.h
@interface btBaseViewController : UIViewController
@end
-(void)renderPadUI;
-(void)renderPhoneUI;
为这两种方法提供无操作定义。
btBaseViewController.m
-(void)renderPhoneUI
// to be overridden by derrived classes
-(void)renderPadUI
// to me overridden by derrived classes.
在 viewDidLoad 中做这样的事情
if(IS_IPAD)
[self renderPadUI];
else
[self renderPhoneUI];
现在从 btBaseViewController
类中将您的 ViewController 子类化为
btHomeViewController.h
@interface btHomeViewController : btBaseViewController
@end
现在,如果您不提供方法 renderPhoneUI
和 renderPADUI
btHomeViewController
的定义,则将执行基本版本。
很简单。
【讨论】:
【参考方案3】:MyUIViewController.h
@interface MYUIViewController : UIViewController
@end
MYUIViewController.m
@implementation MYUIViewController
- (void)viewDidLoad
[super viewDidLoad];
[self myMethodCall];
然后,每个需要执行这个方法的 UIViewController 都应该是 MYUIViewController 类型的。
【讨论】:
【参考方案4】:您可以在应用程序委托中定义方法,也可以创建 UIViewController 的子类
【讨论】:
以上是关于在所有 ViewController 中执行一个方法的主要内容,如果未能解决你的问题,请参考以下文章
如何仅在 iOS 中制作一个 ViewController 肖像 [重复]