0

すべてのViewControllerで1つのメソッドを呼び出すにはどうすればよいですか?

viewcontroller1の1つのメソッドは、

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

doSearchviewcontroller2、viewcontroller3、viewcontroller4、viewcontroller5などからメソッドを呼び出したい。

これを行う方法?

4

7 に答える 7

1

別のクラスで宣言して、すべてのviewControllerでそのクラスをインスタンス化するか、このメソッドをで定義して、すべてのviewControllerAppDelegateで呼び出すことができます。次のようにインスタンスを取得することで、ViewControllersのAppDelegateにアクセスできます。

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

そして最後にこのようなメソッドを呼び出します

[self.appDelegate doSearch];

一般に、アプリケーションを介して共有されるすべてのメソッドまたはデータを別のクラスで宣言し、このクラスを使用することをお勧めします。私は通常singelton、アプリケーションでObjectクラスを使用し、その中ですべての共有データを定義し、最後にすべてのクラスにアクセスします

これがシングルトンクラスの例です

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

AbstractViewControllerすべての一般的な動作またはメソッドを作成し、その中に追加する最善の方法です。AnyViewControllerは Abstract から継承し、任意の共通メソッドを呼び出すことができます

于 2013-03-01T12:50:14.057 に答える
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

今、 From Any ViewController、次のようなメソッドを呼び出すことができます:

[appDelegate doSearch];

ハッピーコーディング。

注:個人的には、AppDelegateクラスでのこの種の実装は避けています。私はこの種の目的でシングルトン オブジェクト パターンを使用します。しかし、Given が最も手っ取り早い方法です。

_ _ _ _ _ _ _編集_ _ _ _ _ _ _ _

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..!");
}

ViewControllerで

#import "class.h"

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