すべてのViewControllerで1つのメソッドを呼び出すにはどうすればよいですか?
viewcontroller1の1つのメソッドは、
- (void)doSearch
{
NSLog(@"Search..!");
}
doSearch
viewcontroller2、viewcontroller3、viewcontroller4、viewcontroller5などからメソッドを呼び出したい。
これを行う方法?
すべてのViewControllerで1つのメソッドを呼び出すにはどうすればよいですか?
viewcontroller1の1つのメソッドは、
- (void)doSearch
{
NSLog(@"Search..!");
}
doSearch
viewcontroller2、viewcontroller3、viewcontroller4、viewcontroller5などからメソッドを呼び出したい。
これを行う方法?
別のクラスで宣言して、すべての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];
AbstractViewController
すべての一般的な動作またはメソッドを作成し、その中に追加する最善の方法です。AnyViewController
は Abstract から継承し、任意の共通メソッドを呼び出すことができます
すべてのコントローラーを に入れ、NSArray *
それが と呼ばれるとしましょうcontrollerArray
。
次に、すべてのコントローラーにセレクターを実行させることができます:
[controllerArray makeObjectsPerformSelector:@selector(doSearch)];
このメソッドは で宣言できます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];
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
以下のチュートリアルをお読みください。
または、すべてのアプリからアクセスできる 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];
最良の方法は、別のヘッダー ファイルを作成してこのメソッドをクラス メソッドにすることです。クラスをインポートすることで、プロジェクト内の任意の場所でこれを呼び出すことができます。また、このクラスを pch ファイルに含めて、すべての VC からのインポートを回避できるようにすることができます。
class.h
+ (void)doSearch
{
NSLog(@"Search..!");
}
ViewControllerで
#import "class.h"
-(void)someMethod
{
[class doSearch];
}