在视图控制器中全局制作一个方法并将其调用到许多视图控制器

时间:2016-12-01 10:39:50

标签: ios objective-c methods global

我想制作一个方法并将其调用到许多视图控制器。帮我?我还想在固定视图上分配UIView或按钮或标签。

这是我的代码

·H

#import <UIKit/UIKit.h>

@interface UIOnlyView : UIView

+ (UIOnlyView *) sharedGlobalClass;

-(void)yourMethod;

@end

的.m

+(UIOnlyView *)sharedGlobalClass {

static dispatch_once_t pred;
static id shared = nil;

dispatch_once(&pred, ^{
    shared = [[super alloc] init];

});

return shared;
}

-(void)yourMethod{

NSLog(@"Method called");

UIView *customView=[[UIView alloc]initWithFrame:CGRectMake(100, 100, 100, 100)];

    customView.backgroundColor=[UIColor redColor];

    [self addSubview:customView];

}

但是我的自定义视图没有在我的视图控制器类中显示,我调用了这个方法。

4 个答案:

答案 0 :(得分:0)

使用GlobalClass这样的

创建一个类NSObject,其类型为+ (GlobalClass *) sharedGlobalClass; - (void) yourMethod : (UIView *) view;

在.h类中创建此方法

+ (GlobalClass *) sharedGlobalClass {

    static dispatch_once_t pred;
    static id shared = nil;

    dispatch_once(&pred, ^{
        shared = [[super alloc] init];

    });


    return shared;
}

- (void) yourMethod : (UIView *) view {
    UIView *customView=[[UIView alloc]initWithFrame:CGRectMake(100, 100, 100, 100)];

    customView.backgroundColor=[UIColor redColor];

    [view addSubview:customView];
}

现在在.m类

[[GlobalClass sharedGlobalClass] yourMethod:self.view];

现在您可以像这样调用此方法

#import "GlobalClass.h"

来自任何一个ViewController,你只需要导入

AssemblyLoadContext.Default.LoadFromAssemblyPath

答案 1 :(得分:0)

您可以将singleton类用于此目的:

创建一个NSObject类:

import <foundation/Foundation.h>

@interface MyManager : NSObject {
    NSString *someProperty;
}

@property (nonatomic, retain) NSString *someProperty;

+ (id)sharedManager;

@end

在您的.m文件中:

导入“MyManager.h”

@implementation MyManager

@synthesize someProperty;

+ (id)sharedManager {
    static MyManager *sharedMyManager = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        sharedMyManager = [[self alloc] init];
    });
    return sharedMyManager;
}

您可以在所有类中全局使用someProperty。 它定义了一个静态变量,只在sharedManager中初始化一次。

了解更多信息:http://www.galloway.me.uk/tutorials/singleton-classes/ https://code.tutsplus.com/articles/design-patterns-singletons--cms-23886

答案 2 :(得分:0)

在目标C中:

@interface OUCSCalendarManager ()
- (void)globalMethod;
@end

@implementation OUCSCSharedManager

/// ------------------------------------------------------------------------
/// Singleton Method
///--------------------------------------------------------------------------

+(instancetype)SharedManager{

    @synchronized(self) {

    static OUCSCalendarManager *sharedInstance = nil;
    static dispatch_once_t pred;
        @synchronized (self) {
            dispatch_once(&pred, ^{
                sharedInstance = [[OUCSCalendarManager alloc]init];
            });
            return sharedInstance;
        }
    }
}

- (void)globalMethod {
 }
}

要从项目中的任何位置调用该方法,您需要创建单例对象并调用此方法

[[OUCSCalendarManager calendarSharedManager]globalMethod];

如果您遇到任何问题,请告诉我。

答案 3 :(得分:0)

<强> ClassA.h

#import "ClassA.h"

@interface ClassA : NSObject

+(id)sharedInstance;
-(void)customMethod;


@end

现在实施 ClassA.m

#import "ClassA.h"

@implementation ClassA


+(id)sharedInstance
{
    static ClassA *instance = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        instance = [[ClassA alloc] init];
    });
    return instance;
}

-(void)customMethod
{
  //Method body
}

现在在其他viewcontrollers中导入头文件并像

一样使用它
[[ClassA sharedInstance] customMethod{}];