闻风
闻风
  • 发布:2016-02-16 17:43
  • 更新:2019-01-18 11:48
  • 阅读:4754

关于调用ios原生页面之后,回调值到H5页面的问题

分类:Native.js
iOS

如题,不知道该怎么写这个回调,试过delegate和Block都不行,感觉代码写的有问题,希望帮忙看下。代码如下

delegate:
var ScanViewController = plus.ios.importClass("ScanViewController");
var newVCobj = new ScanViewController();
var delegate = plus.ios.implements("ScanValueDelegate", {
"getScanValue":function(value){
alert(name);
}
});
newVCobj.setScanDelegate(delegate);
上面是H5页面的设置。我的ScanViewController中相关的代码截取

ScanViewController.h文件

@protocol ScanValueDelegate <NSObject>
@required
-(void) getScanValue:(NSString)value;
@end
typedef void (^CopyScanValue)(NSString
value);
@interface ScanViewController : UIViewController {
id<ScanValueDelegate > _delegate;
}
@property (nonatomic,copy) CopyScanValue copyScanValue;
@property (nonatomic,retain) id<ScanValueDelegate> delegate;
-(void)setScanDelegate:(id<ScanValueDelegate>)delegate;
@end

ScanViewController.m文件中关键代码
回调方法
-(void)backAction {
[self dismissViewControllerAnimated:YES completion:^{
if(_delegate){
[_delegate getScanValue:@"hi"];
}
}];
}
设置代理
-(void)setScanDelegate:(id<ScanValueDelegate>)delegate{
_delegate = delegate;
}

而关于Block部分代码:
在H5中
var newVCobj = plus.ios.newObject("ScanViewController");
plus.ios.invoke( newVCobj, "setCopyScanValue:^", function(value){alert(value)} );

在原生中
-(void)backAction {
[self dismissViewControllerAnimated:YES completion:^{
if(self.copyScanValue){
self.copyScanValue(@"1");
}
}];
}

2016-02-16 17:43 负责人:无 分享
已邀请:
DCloud_IOS_XTY

DCloud_IOS_XTY

plus.ios.invoke( newVCobj, "setCopyScanValue:", function(value){alert(value)} );
  • 闻风 (作者)

    感谢!

    2016-02-17 09:29

  • q***@163.com

    value值是空的啊

    2017-05-04 22:23

闻风

闻风 (作者)

不过很奇怪的是:这个alert确实响应了,但是里面没有值。
if(self.copyScanValue){
self.copyScanValue(@"1");
} 这个是在原生页面写的回调。
在H5这边使用 function(value){alert(arguments.length)} alert出来的值是0。如果使用function(value){
alert(name); alert出来的值是undifine

低调的帅气

低调的帅气

大哥,这个问题,你解决了吗

jakson

jakson

都是一样的问题,为什么技术支持迟迟没有答复呢?

UncleJack

UncleJack

也是undefined的问题。

2***@qq.com

2***@qq.com - 750865

你这个样子是拿不到值的。可以在viewcontroller里面讲你要返回的值设置出来,然后用plusGetAttribute的属性来获取。

IOS代码:
//要返回的地址key值
@property (nonatomic,strong) NSString *name;

javascript 代码:

var ScanViewController = plus.ios.importClass("ScanViewController");

var newVCobj = new ScanViewController();

var delegate = plus.ios.implements("ScanValueDelegate", {

"getScanValue":function(value){

 var selectedKey = ScanViewController.plusGetAttribute('name');  

alert(name);

}

});

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