嗨其他软件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) 我有一个在内Fragment托管一个RecyclerView的MotionLayout。在回收器视图的顶部,我有一个可以折叠和展开的视图,所有这些都在我的运动场景中完成。它是通过单击触发的,并且响应拖动回收站视图。到目前为止,这一切都按预期进行。
现在问题来了:我想在我的应用程序中完全隐藏某些状态的折叠视图。但是,如果我设置视图的可见性或更改其高度,则在拖动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)