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/