0

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

viewcontroller1 中的一种方法,例如,

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

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

这该怎么做?

4

7 回答 7

1

您可以在单独的类中声明它并在所有视图控制器中实例化该类,或者您可以在您的视图控制器中定义此方法AppDelegate并调用所有视图控制器。您可以通过像这样获取它的实例来访问 ViewControllers 中的 AppDelegate

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

最后像这样调用方法

[self.appDelegate doSearch];

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

这是singelton类的例子

我的数据.h

@interface MyData : NSObject

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

@end

我的数据

#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];
于 2013-03-01T12:39:00.043 回答
0

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

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

[controllerArray makeObjectsPerformSelector:@selector(doSearch)];
于 2013-03-01T12:44:03.350 回答
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

现在,从 Any ViewController,您可以调用如下方法:

[appDelegate doSearch];

快乐编码。

注意:AppDelegate就我个人而言,我避免在Class中进行这种实现。我使用单例对象模式来实现这种目的。但是,Given 是最快的方法。

_ __ _ __ _ __ _ _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];

于 2013-03-01T12:45:54.477 回答
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

于 2013-03-01T12:47:45.563 回答
0

您可能想阅读以下教程

Objective C 中的全局函数和变量

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

-(void)myMethod;

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

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

从任何其他类(Master 或 Detail 等),您可以通过以下方式访问 myMethod:

#import "AppDelegate.h"

AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
[appDelegate myMethod];
于 2013-03-01T12:48:01.030 回答
0

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

class.h

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

在视图控制器中

#import "class.h"

    
-(void)someMethod
{
    [class doSearch];
}
于 2013-03-01T12:49:04.530 回答
0

制作AbstractViewController并在其中添加所有常见行为或方法的最佳方法。Any ViewControllerwill 继承自 Abstract 并且可以调用任何常用 Method

于 2013-03-01T12:50:14.057 回答