小编ste*_*tel的帖子

如何将React Native Promise与Swift联系起来

嗨其他软件enthousiasts,

我目前正在研究一个React本机项目,我需要添加一些用swift编写的逻辑.我能够通过桥接到Objective C然后到Swift来触发一个基本的swift函数.

当我尝试用promises做某事时会出现问题.我描述的这个页面在Promise的Objective C部分和Swift的桥接上是清楚的,但对swift的承诺却不是这样:https://facebook.github.io/react-native/docs/native-modules-ios html的

这就是我所拥有的:

项目桥接,Header.h

#import <React/RCTBridgeModule.h>
Run Code Online (Sandbox Code Playgroud)

MyLoginBridge.m

#import <Foundation/Foundation.h>
#import <React/RCTBridgeModule.h>

@interface RCT_EXTERN_REMAP_MODULE(MyCustomLoginJSName, MyLoginModule, NSObject)

RCT_EXTERN_REMAP_METHOD(loginWithEmail,
                    resolver:(RCTPromiseResolveBlock)resolve
                    rejecter:(RCTPromiseRejectBlock)reject)

RCT_EXTERN_METHOD(testMethod)

@end
Run Code Online (Sandbox Code Playgroud)

MyLoginModule.swift

import Foundation

@objc(TripleASDKModule)
class TripleASDKModule: NSObject {

  @objc
  func loginWithEmail(resolver resolve: RCTPromiseResolveBlock,  rejecter reject: RCTPromiseRejectBlock) -> Void {
    resolve("This method is troublesome")
  }

  @objc func testMethod() -> Void {
    print("This Does appear")
  }
}
Run Code Online (Sandbox Code Playgroud)

当我触发testMethod时,打印显示在Xcode中,以便执行快速代码.但是当我调用loginWithEmail方法时,我得到臭名昭着的红色React Native错误屏幕说:

Exception 'resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject is not a recognized Objective-C method.' was thrown while invoking loginWithEmail on target …
Run Code Online (Sandbox Code Playgroud)

objective-c swift react-native

16
推荐指数
2
解决办法
5091
查看次数

是否可以禁用MotionLayout?

我有一个在内Fragment托管一个RecyclerViewMotionLayout。在回收器视图的顶部,我有一个可以折叠和展开的视图,所有这些都在我的运动场景中完成。它是通过单击触发的,并且响应拖动回收站视图。到目前为止,这一切都按预期进行。

现在问题来了:我想在我的应用程序中完全隐藏某些状态的折叠视图。但是,如果我设置视图的可见性或更改其高度,则在拖动recyclerview时它仍会重新显示。

因此可以完全禁用MotionLayout(锁定约束),直到再次启用它为止。禁用拖动识别器也是一种可行的解决方案。

现在使用一些简化的XML来演示这种情况。

该布局包含带有标题视图和recyclerview的运动布局

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.motion.MotionLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/favouritesMotionLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layoutDescription="@xml/favourites_motion_scene"
    android:animateLayoutChanges="true">

    <ImageView
        android:id="@+id/headerView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        ...
        />

    <android.support.v4.widget.SwipeRefreshLayout
        android:id="@+id/swipeRefreshLayout"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        ...
    >

        <pinch.nrcnext.view.scroll.NRCRecyclerView
            android:id="@+id/favoritesList"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />

    </android.support.v4.widget.SwipeRefreshLayout>

</android.support.constraint.motion.MotionLayout>
Run Code Online (Sandbox Code Playgroud)

对应的动作场景:

<?xml version="1.0" encoding="utf-8"?>
<MotionScene
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:motion="http://schemas.android.com/apk/res-auto"
>

    <Transition
        motion:constraintSetStart="@id/expanded"
        motion:constraintSetEnd="@id/collapsed"
        motion:duration="300">
        <OnSwipe
            motion:touchAnchorId="@id/swipeRefreshLayout"
            motion:touchAnchorSide="top"
            motion:dragDirection="dragUp" />
    </Transition>

    <ConstraintSet android:id="@+id/expanded">
        ... Constraints for expanded header ...
    </ConstraintSet>

    <ConstraintSet android:id="@+id/collapsed">
        ... ... Constraints for collapsed header ...
    </ConstraintSet>

</MotionScene> …
Run Code Online (Sandbox Code Playgroud)

android android-motionlayout

5
推荐指数
2
解决办法
1677
查看次数