2017-01-19 9 views
0

私はカスタムを開発しましたCordova plugin私は正常にJSからそれを呼び出すことができますが、私はまた別のクラス(ネイティブコード)から呼び出す必要があります。どうしたらいいですか?Cordova Plugin:別のクラスからカスタムプラグインのメソッドを呼び出す(objective-c)

カスタムプラグインのメソッドshowImageURLはどのように呼び出せますか?

// MyCustomPlugin.m

@implementation MyCustomPlugin 

    - (void) showImageURL:(CDVInvokedUrlCommand*)command{ 

     if (_fullScreenImageView) 
      return; 

     NSString *fullPath = [[command.arguments objectAtIndex:0] valueForKey:@"url"]; 

     UIImage *image = [UIImage imageNamed:[NSString stringWithFormat:@"www/application/app/%@", fullPath]]; 
     _fullScreenImageView = [[UIImageView alloc] initWithImage:image]; 
     _fullScreenImageView.frame=[[UIScreen mainScreen] bounds]; 

     UIViewController *controller = [UIApplication sharedApplication].keyWindow.rootViewController; 

     [controller.view addSubview:_fullScreenImageView]; 
     [controller.view bringSubviewToFront:_fullScreenImageView]; 

    } 

// AnotherClass.m

@implementation AnotherClass 


- (void) foo { 

    MyCustomPlugin *splashScreen = [[MyCustomPlugin alloc] init]; 
    [splashScreen showImageURL:]; // <<- what params should I pass to `showImageURL`? 

} 

P.S.これは、私はJSからそれを呼び出す方法です:あなたは、単純なObjective-Cの関数としてそれを呼び出すことができるようにwindow.FullScreenImage.showImageURL('img/bar.png');

答えて

1

最善のアプローチは、抽象化へコルドバ・インターフェースです:

@implementation MyCustomPlugin 

    - (void) showImageURL:(CDVInvokedUrlCommand*)command{ 
     NSString *fullPath = [[command.arguments objectAtIndex:0] valueForKey:@"url"]; 
     [self _showImageURL:fullPath]; 
    } 

    - (void) _showImageURL:(NSString*)fullPath{ 

     if (_fullScreenImageView) 
      return; 

     UIImage *image = [UIImage imageNamed:[NSString stringWithFormat:@"www/application/app/%@", fullPath]]; 
     _fullScreenImageView = [[UIImageView alloc] initWithImage:image]; 
     _fullScreenImageView.frame=[[UIScreen mainScreen] bounds]; 

     UIViewController *controller = [UIApplication sharedApplication].keyWindow.rootViewController; 

     [controller.view addSubview:_fullScreenImageView]; 
     [controller.view bringSubviewToFront:_fullScreenImageView]; 

    } 


@implementation AnotherClass 

- (void) foo { 

    MyCustomPlugin *splashScreen = [[MyCustomPlugin alloc] init]; 
    [splashScreen _showImageURL:@"path/to/some/image.png"]; 

} 
+0

ありがとう!あなただけが 'showImageURL'メソッドの重複した宣言を持っています – Edgar

+1

が修正されました:' showImageURL' => '_showImageURL' – DaveAlden

関連する問題