4***@qq.com
4***@qq.com
  • 发布:2017-09-25 11:30
  • 更新:2017-09-25 13:57
  • 阅读:2671

iOS里,h5+怎样调用自己写的ViewController,并设置为self.window的rootViewController

分类:Native.js

iOS里,h5+怎样调用自己写的ViewController,并设置为self.window的rootViewController

2017-09-25 11:30 1 条评论 负责人:无 分享
已邀请:
3***@qq.com

3***@qq.com

要用nativejs,不能用oc和swift的语法。

// 新建一个对象

var viewController  = plus.ios.newObject("MyViewController");

目前没有方法能访问 self 实例,有一种方案是使用原生的通知机制

var NSNotificationCenter = plus.ios.importClass("NSNotificationCenter");  
var NSNotification = plus.ios.importClass("NSNotification");  
var self = plus.ios.currentWebview();  
var nc = NSNotificationCenter.defaultCenter();  
plus.ios.invoke(nc, 'postNotificationName:object:', "hello", null);

但是这就耦合度太低,会导致不稳定,还有一种方案就是实现单例类,这时候你就能实现

 var viewController = plus.ios.importClass("MyViewController");  
 var instance  =  plus.ios.invoke(viewController, 'shareInstance');

最后一种做法是做一个原生插件

http://ask.dcloud.net.cn/docs/#//ask.dcloud.net.cn/article/67

当然,新的ViewController实例可以用js创建,但是self.window需要访问self的必须使用上面的方法

  • 4***@qq.com (作者)

    你好,你说的第二种方法实现单例类具体是怎样的呢

    2017-09-25 13:53

  • 4***@qq.com (作者)

    我直接贴代码啦

    //MainViewController mainVc = [[MainViewController alloc] init];

    //UINavigationController
    navi = [[UINavigationController alloc] initWithRootViewController:mainVc];

    //[self.window setRootViewController:navi];

    //[self.window makeKeyAndVisible];

    就是这原生四句话,怎么翻译成js啊,万分感谢!!!

    2017-09-25 13:56

  • 3***@qq.com

    在类实现文件实现如下方法:


    static MainViewController *_sharedInstance = nil;




    • (instancetype) shareInstance {

      static dispatch_once_t onceToken ;

      dispatch_once(&onceToken, ^{

      _sharedInstance = [[self alloc] init] ;

      }) ;


      return _sharedInstance ;

      }




    然后使用


    var viewController = plus.ios.importClass("MainViewController");

    var instance = plus.ios.invoke(viewController, 'shareInstance');


    这个instance就是oc里面的self了,后面你使用它的window属性


    var ocWindow = instance.plusGetAttribute('window');

    plus.ios.invoke(ocWindow, 'setRootViewController', nav );

    plus.ios.invoke(ocWindow, 'makeKeyAndVisible');


    就这样,这是混编

    2017-09-25 17:07

4***@qq.com

4***@qq.com (作者)

求大神解答

4***@qq.com

4***@qq.com (作者)

我直接贴代码啦
//MainViewController mainVc = [[MainViewController alloc] init];
//UINavigationController
navi = [[UINavigationController alloc] initWithRootViewController:mainVc];
//[self.window setRootViewController:navi];
//[self.window makeKeyAndVisible];
就是这原生四句话,怎么翻译成js啊,万分感谢!!!

该问题目前已经被锁定, 无法添加新回复