iOS里,h5+怎样调用自己写的ViewController,并设置为self.window的rootViewController
- 发布:2017-09-25 11:30
- 更新:2017-09-25 13:57
- 阅读:2767
要用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 (作者)
我直接贴代码啦
//MainViewController mainVc = [[MainViewController alloc] init];
//UINavigationController navi = [[UINavigationController alloc] initWithRootViewController:mainVc];
//[self.window setRootViewController:navi];
//[self.window makeKeyAndVisible];
就是这原生四句话,怎么翻译成js啊,万分感谢!!!
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