Это то, что я пытаюсь сделать, но получаю ошибку.Я установил корневую навигацию как bottomTabs
(это похоже на главное меню приложения), у него есть два дочерних элемента, макет стека и компоновка компонентов.На экране стека я нажимаю какой-то другой экран (только макет компонента), и на этом макете компонента я хотел бы нажать новый экран с макетом bottomTabs
- это были бы новые bottomTabs, так что нижние вкладки "главного меню", установленные через Navigation.setRoot
, являютсятеперь скрыт, и пользователь видит это новое меню bottomTabs - только для этого экрана.Я получаю эту ошибку:
Exception '-[RNNTabBarController isCustomTransitioned]: unrecognized selector sent to instance 0x7f82e2876600'
was thrown
while invoking push on target RNNBridgeModule with params(
push11,
Component6, {
children = ({
children = ();
data = {
name = "mad.app.Dummy";
options = {
bottomTab = {
text = tab1;
};
};
};
id = Component9;
type = Component;
}, {
children = ();
data = {
name = "mad.app.Smarty";
options = {
bottomTab = {
text = "Tab 2";
};
};
};
id = Component10;
type = Component;
});
data = {};
id = ee;
type = BottomTabs;
},
3324,
3325
)
callstack: (
0 CoreFoundation 0x000000010388c29b __exceptionPreprocess + 331
1 libobjc.A.dylib 0x0000000101f6f735 objc_exception_throw + 48
2 CoreFoundation 0x00000001038aafa4 -[NSObject(NSObject) doesNotRecognizeSelector:] + 132
3 UIKitCore 0x000000010849d163 -[UIResponder doesNotRecognizeSelector:] + 287
4 CoreFoundation 0x0000000103890fb6 ___forwarding___ + 1446
5 CoreFoundation 0x0000000103892e88 _CF_forwarding_prep_0 + 120
6 TestMobileApp 0x0000000100b567f8 -[RNNCommandsHandler push:layout:completion:rejection:] + 2840
7 TestMobileApp 0x0000000100b18a88 -[RNNBridgeModule push:componentId:layout:resolver:rejecter:] + 392
8 CoreFoundation 0x000000010389311c __invoking___ + 140
9 CoreFoundation 0x00000001038905b5 -[NSInvocation invoke] + 325
10 CoreFoundation 0x0000000103890a06 -[NSInvocation invokeWithTarget:] + 54
11 TestMobileApp 0x0000000100c1791a -[RCTModuleMethod invokeWithBridge:module:arguments:] + 2810
12 TestMobileApp 0x0000000100cd3646 _ZN8facebook5reactL11invokeInnerEP9RCTBridgeP13RCTModuleDatajRKN5folly7dynamicE + 790
13 TestMobileApp 0x0000000100cd315f _ZZN8facebook5react15RCTNativeModule6invokeEjON5folly7dynamicEiENK3$_0clEv + 127
14 TestMobileApp 0x0000000100cd30d9 ___ZN8facebook5react15RCTNativeModule6invokeEjON5folly7dynamicEi_block_invoke + 25
15 libdispatch.dylib 0x000000010697c51d _dispatch_call_block_and_release + 12
16 libdispatch.dylib 0x000000010697d587 _dispatch_client_callout + 8
17 libdispatch.dylib 0x00000001069893bc _dispatch_main_queue_callback_4CF + 1290
18 CoreFoundation 0x00000001037ef7f9 __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 9
19 CoreFoundation 0x00000001037e9e86 __CFRunLoopRun + 2342
20 CoreFoundation 0x00000001037e9221 CFRunLoopRunSpecific + 625
21 GraphicsServices 0x000000010cd271dd GSEventRunModal + 62
22 UIKitCore 0x00000001080b6115 UIApplicationMain + 140
23 TestMobileApp 0x0000000100a79420 main + 112
24 libdyld.dylib 0x0000000104a64551 start + 1
)
Если я просто нажимаю макет компонента - все в порядке, поэтому проблема должна быть с макетом bottomTabs.
Вот мой код:
index.js -> Настройка корня навигации
Navigation.events().registerAppLaunchedListener(() => {
Navigation.setRoot({
root: {
bottomTabs: {
children: [
{
stack: {
children: [
{
component: {
name: "mad.app.LogsScreen",
options: {
topBar: {
visible: false,
drawBehind: true
}
}
}
}
],
options: {
bottomTab: {
text: "Tab 1",
testID: "tab1-btn"
}
}
}
},
{
component: {
name: "mad.app.Dummy",
options: {
bottomTab: {
text: "Tab 2",
testID: "tab2-btn"
}
}
}
}
]
}
}
});
});
На первой вкладке (mad.app.LogsScreen) есть кнопка, которая помещает этот макет в стек:
const screenLayout = {
component: {
name: "mad.app.Creator.CreatorScreen",
options: {
topBar: {
rightButtons: [
{
text: "Done",
id: "mad.app.Creator.CreatorScreen.header.right.1"
}
]
},
}
}
};
export default screenLayout;
На этом нажатомпри нажатии кнопки «Готово» я хочу нажать макет с помощью новых bottomTabs, это макет, который я пытался нажать:
const screen = {
bottomTabs: {
id: "ee",
children: [
{
component: {
name: "mad.app.Dummy",
options: {
bottomTab: {
text: "tab1"
}
}
}
},
{
component: {
name: "mad.app.Smarty",
options: {
bottomTab: {
text: "Tab 2"
}
}
}
}
]
}
};
export default screen;
Но тогда я получаю сообщение об ошибке, приведенное выше, если я просто пытаюсь нажать компонентраскладка так:
const screen = {
component: {
name: "mad.app.Dummy",
}
}
Тогда все работает нормально.Можно ли добиться того, чего я хочу?Если да, то как?
Заранее спасибо!