0

我想在 Objective C 中创建一个视图并在本机反应中使用,但不知道如何做到这一点这是我的代码:Obj-C:

#import "DGTAuthenticateButtonView.h"
#import "RCTBridge.h"
#import "RCTEventDispatcher.h"
#import "UIView+React.h"
#import <DigitsKit/DigitsKit.h>

@implementation DGTAuthenticateButtonView

RCT_EXPORT_MODULE()
- (UIView *) view {
  UIButton *button = [[UIButton alloc] init];
  [button setTitle:@"REGISTER" forState:UIControlStateNormal];
  return button;

}

RCT_EXPORT_METHOD(authenticate) {
  Digits *digits = [Digits sharedInstance];
  DGTAuthenticationConfiguration *configuration = [[DGTAuthenticationConfiguration alloc] initWithAccountFields:DGTAccountFieldsDefaultOptionMask];
  configuration.phoneNumber = @"+345555555555";
  [digits authenticateWithViewController:nil configuration:configuration completion:^(DGTSession *newSession, NSError *error){
  }];

}

@end

我想打电话给authenticateTouchableOpacity 但它不起作用:(

import React, {Component} from 'react';
import {
    AppRegistry,TouchableOpacity
} from 'react-native';



var requireNativeComponent = require('requireNativeComponent');

var DGTAuthenticateButtonView = requireNativeComponent('DGTAuthenticateButtonView', DGTAuthenticateButtonView);

class TestProj extends Component {
    render() {
        return (

            <TouchableOpacity style={{flex: 1, backgroundColor: 'green'}}
                onPress={() => DGTAuthenticateButtonView.authenticate()}
            />

        )
    }
}

AppRegistry.registerComponent('TestProj', () => TestProj);

有人知道怎么做吗?提前致谢。

4

1 回答 1

1

看来您在这里混合了两个不同的概念。

您可以创建一个原生 UI 组件- 一个原生视图,您可以将其用作 RNrender函数中的组件;或者你可以创建一个原生模块——一个允许你添加原生功能并从你的 JS 代码中调用它的模块,这个模块没有视图。

据我所知(您没有包含RCTViewManager子类的代码),您正在尝试Native UI Components在本机端创建一个(返回一个视图),但没有在您的 JS 中使用它(不用作中的一个组件render)。您还应该知道,您不能像在此处尝试那样直接在本机视图上直接调用方法。

我建议您使用以下解决方案之一:

  1. 如果你真的需要一个定制的原生 UI - 按照说明创建一个Native UI Component然后在你的渲染函数中使用你的组件。然后,您可以使用映射到回调的道具来传达按钮按下的信息(有关从本机到 JS 的事件,请参见此处)。
  2. 如果您不需要自定义 UI(您想继续使用TouchableOpacity您的示例),您可以按照说明创建一个Native Module. 然后,您将能够authenticate像在此处尝试执行的那样静态调用您的方法以仅执行本机逻辑。您甚至可以修改该authenticate方法以接收其他参数 - 拒绝/解决承诺或回调以在完成时通知 JS。
于 2016-10-14T12:24:45.137 回答