如何在所有视图控制器中调用one方法?

时间:2013-03-01 12:37:06

标签: iphone ios objective-c xcode cocoa-touch

如何在所有视图控制器中调用one方法?

viewcontroller1中的一个方法,如

- (void)doSearch
{
   NSLog(@"Search..!");
}

我想从viewcontroller2,viewcontroller3,viewcontroller4,viewcontroller5等调用doSearch方法。

怎么做?

7 个答案:

答案 0 :(得分:1)

您可以在单独的类中声明它并在所有viewControllers中实例化该类,或者您可以在AppDelegate中定义此方法并调用所有viewController。您可以通过获取此实例

来访问ViewControllers中的AppDelegate
self.appDelegate=(AppDelegate*)[[UIApplication sharedApplication]delegate];

最后调用这样的方法

[self.appDelegate doSearch];

通常,最好在单独的类中声明通过应用程序共享的所有方法或数据,并使用此类。我通常在我的应用程序中使用singelton Object类,定义其中的所有共享数据,最后在所有类中访问

这里是singelton类的例子

MyData.h

@interface MyData : NSObject

+(MyData*)getInstance;
-(void)search;

@end

MyData.m

#import "MyData.h"

@implementation MyData



static MyData *instance =nil;

+(MyData *)getInstance
{

    @synchronized(self)
    {
    if(instance==nil)
        {

        instance= [[MyData alloc]init];
        }
    }
    return instance;
}

-(void)search {
    NSLog(@"search");
}

@end

最后在你的viewController

  MyData *myData=[MyData getInstance];
  [myData search];

答案 1 :(得分:0)

将所有控制器放在NSArray *中,假设它被称为controllerArray

然后你可以让所有控制器执行选择器:

[controllerArray makeObjectsPerformSelector:@selector(doSearch)];

答案 2 :(得分:0)

您可以在AppDelegate.h中声明此方法。像

- (void)doSearch;

并在AppDelegate.m中实施

- (void)doSearch
{
    //Your Search Logic
}

然后,创建AppDelegate实例,如

appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];

让您的项目的.pch文件如下所示:

#ifdef __OBJC__

    #import <Foundation/Foundation.h>
    #import <UIKit/UIKit.h>

    #import "AppDelegate.h"
    AppDelegate *appDelegate;

#endif

现在,从任何ViewController开始,您可以调用以下方法:

[appDelegate doSearch];

快乐编码。

注意:就个人而言,我在AppDelegate类中避免了这种实现。 我使用Singleton Object Pattern来达到这种目的。但是,鉴于最快的方式。

<强> _ __ _ __ _ __ _ _EDIT_ _ 的__ _ __ _ __ _ _

添加NSObject类型的新类文件:将其命名为CommonMethod(或任何您想要的内容)

CommonMethod.h

中的

@interface CommonMethods : NSObject
+ (CommonMethods *)sharedObject;
+ (void)doSearch;
CommonMethod.m

中的

#import "CommonMethods.h"

@implementation CommonMethods

+ (CommonMethods *)sharedObject 
{
    static dispatch_once_t once;
    static CommonMethods *sharedObject;
    dispatch_once(&once, ^ { sharedObject = [[CommonMethods alloc] init]; });
    return sharedObject;
}

+ (BOOL)doSearch
{
    // Your Search Logic.
}

现在,将#import "CommonMethods.h"添加到项目的.pch文件中。

你们都准备好了...... !!!

方法调用(在任何viewController中):[CommonMethods doSearch];

答案 3 :(得分:0)

将您的方法添加到AppDelegate.m文件

- (void)doSearch
{
   NSLog(@"Search..!");
}

#import "AppDelegate.h"中添加UIViewController您想要致电:

您可以通过

调用方法
AppDelegate *del = (AppDelegate *)[[UIApplication sharedApplication] delegate];
[del performSelector:@selector(doSearch) withObject:nil afterDelay:0];

来自任何UIViewController

答案 4 :(得分:0)

您可能希望阅读以下教程

Global functions and variables in Objective C

或者您可以在appDelegate类中创建可以通过所有应用程序访问的方法。例如,在 AppDelegate.h 中,您已声明此方法如下:

-(void)myMethod;

AppDelegate.m 中,您将其定义为:

-(void)myMethod
{
    NSLog(@"myMethod is getting called");
}

从任何其他类(主人或详细信息等),您可以通过以下方式访问myMethod:

#import "AppDelegate.h"

AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
[appDelegate myMethod];

答案 5 :(得分:0)

最好的方法是创建一个单独的头文件,使这个方法成为一个类方法,你可以通过导入类在项目的任何地方调用它。你可以将这个类包含在你的pch文件中,这样就可以避免导入所有风险投资

class.h

+ (void)doSearch
{
   NSLog(@"Search..!");
}
ViewControllers中的

#import "class.h"


-(void)someMethod
{
    [class doSearch];
}

快乐编码

答案 6 :(得分:0)

使AbstractViewController及其内部的最佳方式添加所有常见的行为或方法。任何ViewController都将从Abstract继承,并且可以调用任何常用的方法