javascript - 如何从React-Native向Native发送参数

标签 javascript ios objective-c react-native

WebView.js

// WebView.js

var PropTypes = require('ReactPropTypes')
var React = require('React')
import { requireNativeComponent } from 'react-native'

var UIWebView = React.createClass({

  propTypes: {
    url: PropTypes.string
  },

  render () {
    return <RCTUIWebView {...this.props} />
  }
})

var RCTUIWebView = requireNativeComponent('RCTUIWebView', UIWebView)

module.exports = UIWebView

RCTUIWebViewManager.h

//  RCTWebViewManager.h

#ifndef RCTUIWebViewManager_h
#define RCTUIWebViewManager_h

#import <UIKit/UIKit.h>
#import "RCTViewManager.h"
#import <UIView+React.h>

@interface RCTUIWebViewManager : RCTViewManager

@end

#endif /* RCTViewManager_h */

RCTWebViewManager.m

//  RCTWebViewManager.m

#import "RCTUIWebViewManager.h"
#import "RCTUIWebView.h"

#import "RCTBridge.h"
#import "RCTEventDispatcher.h"
#import "UIView+React.h"

@implementation RCTUIWebViewManager

RCT_EXPORT_MODULE()

RCT_EXPORT_VIEW_PROPERTY(url, NSString);

- (UIView *)view
{

  RCTUIWebView *rctuiwebview = [[RCTUIWebView alloc] init];
  return [rctuiwebview getWebView];

}

@end

RCTUIWebView.h

// RCTUIWebView.h
#ifndef RCTUIWebView_h
#define RCTUIWebView_h

#import <UIKit/UIKit.h>
#import <UIView+React.h>

@class RCTUIWebView;

@interface RCTUIWebView : NSObject

@property (nonatomic, copy) NSString *url;
//@property (nonatomic, assign) NSString *uri;

- (UIWebView *) getWebView;

@end

#endif /* RCTUIWebView_h */

RCTUIWebView.m

// RCTUIWebView.m

#import <Foundation/Foundation.h>

#import "RCTUIWebView.h"

#import "RCTBridge.h"
#import "RCTEventDispatcher.h"

@implementation RCTUIWebView

NSString *URL = @"http://www.baidu.com";

- (void) setUrl:(NSString *)url {
  URL = url;
}

- (UIWebView *) getWebView {
  UIWebView *webview = [[UIWebView alloc] init];
  NSURLRequest *request =[NSURLRequest requestWithURL:[ NSURL URLWithString: URL]];
  [webview loadRequest:request];
  return webview;
}

@end

我尝试使用参数“url”渲染它;

var BrowserView = require('./WebView')
<BrowserView
  style={{width: 400, height: 500}}
  url={this.state.event.landingPage}
/>

显示

"Exception thrown while executing UI block: - [UIWebView setUrl:]: unrecognized selector set to instance 0x7fcf2de1e180"

在刺激器中并显示

"[error][tid:main][RCTNavigator.m:514] Error setting property 'url' of RCTUIWebView with tag #328: Error setting property 'url' of RCTUIWebView with tag #333: Cannot adjust current top of stack beyond available views"

在 Xcode 控制台中。

我不明白为什么!

如果我修改了渲染部分:

var BrowserView = require('./WebView')
<BrowserView
  style={{width: 400, height: 500}}
  //url={this.state.event.landingPage}
/>

没关系。

最佳答案

返回RCTWebViewManager.m中RCTUIWebView的实例

//  RCTWebViewManager.m

#import "RCTUIWebViewManager.h"
#import "RCTUIWebView.h"

@implementation RCTUIWebViewManager

RCT_EXPORT_MODULE()

RCT_EXPORT_VIEW_PROPERTY(url, NSString);

- (UIView *)view
{

  RCTUIWebView *rctuiwebview = [[RCTUIWebView alloc] init];
  return rctuiwebview;

}

@end

关于javascript - 如何从React-Native向Native发送参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37544958/

相关文章:

objective-c - NSArrayController绑定(bind): Suppress "No selection"

javascript - 查询 : Adding class to dynamically generated li

javascript - 将鼠标悬停在列出的元素文本上时会出现图像

iOS - 在负坐标上绘制二维线条

ios - CMVideoFormatDescriptionGetCleanAperture() 快速错误

ios - 尝试使用 Alamofire 检查 iOS 设备上的互联网连接

objective-c - 无法在 SwiftPM 的 ObjC 模块中导入 AppKit

javascript - WKWebview - Javascript 和 native 代码之间的复杂通信

javascript - 如何在angularjs中以编程方式调用自定义指令

javascript - 当 css 显示无阻止时对象标记重新加载