在所有ViewControllers中执行一个方法

时间:2014-01-28 07:47:56

标签: ios objective-c uiviewcontroller

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

我需要在所有ViewController上执行相同的方法,正好在viewDidLoadviewDidAppear方法上。

除了从每个控制器调用此函数之外,AppDelegate或其他地方是否有任何方法?

先谢谢

抱歉,如果这是一个愚蠢的问题或其他什么

4 个答案:

答案 0 :(得分:1)

试试这个,

创建BaseViewController

@interface BaseViewController : UIViewController

并通过继承ViewControllers

创建所有其他BaseViewController
@interface AViewController : BaseViewController

并在viewDidLoadviewDidAppear BaseViewController

上执行ypu内容

答案 1 :(得分:0)

我猜是在制作一个UIViewController子类,它可以完成你所做的工作,并为你的应用程序的每个控制器创建新的子类类型。

MyUIViewController.h

@interface MYUIViewController : UIViewController

@end

MYUIViewController.m

@implementation MYUIViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self myMethodCall];
}

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

答案 2 :(得分:0)

您可以在app delegate中定义方法,也可以创建UIViewController的子类

答案 3 :(得分:0)

这是一种简单的方法。关注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类的ViewControllers作为

    进行子类化

    btHomeViewController.h

    @interface btHomeViewController : btBaseViewController
    
    @end
    

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

很简单。