如何在所有视图控制器中调用one方法?
viewcontroller1中的一个方法,如
- (void)doSearch
{
NSLog(@"Search..!");
}
我想从viewcontroller2,viewcontroller3,viewcontroller4,viewcontroller5等调用doSearch
方法。
怎么做?
答案 0 :(得分:1)
您可以在单独的类中声明它并在所有viewControllers中实例化该类,或者您可以在AppDelegate
中定义此方法并调用所有viewController。您可以通过获取此实例
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继承,并且可以调用任何常用的方法