在所有 ViewController 中执行一个方法

Posted

技术标签:

【中文标题】在所有 ViewController 中执行一个方法【英文标题】:execute a method in all the ViewControllers 【发布时间】:2014-01-28 07:47:55 【问题描述】:

也许这是不可能的,但这是我的问题:

我需要在所有ViewControllers 上执行相同的方法,确切地说是在viewDidLoadviewDidAppear 方法上。

除了从每个控制器调用此函数之外,AppDelegate 或其他地方有什么办法吗?

【问题讨论】:

在appdelegate中声明和定义方法,并在制作appdelegate的对象后调用它或另一种方式使另一个类通用,并在导入和制作它的对象后声明和定义方法并调用 【参考方案1】:

试试这个,

创建一个BaseViewController

@interface BaseViewController : UIViewController

并通过子类化BaseViewController 创建所有其他ViewControllers

@interface AViewController : BaseViewController

并在viewDidLoadBaseViewControllerviewDidAppear 上做你的事情

【讨论】:

【参考方案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

现在,如果您不提供方法 renderPhoneUIrenderPADUI btHomeViewController 的定义,则将执行基本版本。

很简单。

【讨论】:

【参考方案3】:

MyUIViewController.h

@interface MYUIViewController : UIViewController

@end

MYUIViewController.m

@implementation MYUIViewController

- (void)viewDidLoad

    [super viewDidLoad];
    [self myMethodCall];

然后,每个需要执行这个方法的 UIViewController 都应该是 MYUIViewController 类型的。

【讨论】:

【参考方案4】:

您可以在应用程序委托中定义方法,也可以创建 UIViewController 的子类

【讨论】:

以上是关于在所有 ViewController 中执行一个方法的主要内容,如果未能解决你的问题,请参考以下文章

更改按钮单击时的 viewController

Segue 没有在 viewController 中执行

如何仅在 iOS 中制作一个 ViewController 肖像 [重复]

Swift3,如何在不同的 viewController 中使用相同的 UITableView

从内存中删除未使用的 ViewController

在循环中删除所有带有其他实例视图的 viewController