2017-02-22 15 views
5

Sử dụng thanh điều hướng tab Điều hướng phản ứng https://reactnavigation.org/docs/navigators/tab làm cách nào để thực hiện một trong các nút tab đẩy màn hình lên làm phương thức toàn màn hình? Tôi thấy trình điều hướng ngăn xếp có tùy chọn mode=modal. làm cách nào để sử dụng chế độ đó khi nhấp vào nút tab TakePhoto? Nhấp vào nó hiện vẫn hiển thị thanh tab ở phía dưới.Làm cách nào để tôi thực hiện nút TabNavigator đẩy màn hình phương thức bằng Điều hướng phản ứng

const MyApp = TabNavigator({ 
    Home: { 
    screen: MyHomeScreen, 
    }, 
    TakePhoto: { 
    screen: PhotoPickerScreen, // how can I have this screen show up as a full screen modal? 
    }, 
}); 
+1

Bạn đã giải quyết vấn đề này bằng cách nào? Tôi đã cố gắng tìm ra nó trong một thời gian – IamLasse

Trả lời

7

Thực ra, không có hỗ trợ trong react-navigation để thay đổi cách trình bày khi đang bay từ default đến modal (xem cuộc thảo luận về số here) này. Tôi chạy vào cùng một vấn đề và giải quyết nó bằng cách sử dụng một rất đỉnh StackNavigator với headerMode thiết lập để nonemode thiết lập để modal:

const MainTabNavigator = TabNavigator(
    { 
     Tab1Home: { screen: Tab1Screen }, 
     Tab2Home: { screen: Tab2Screen } 
    } 
); 

const LoginRegisterStackNavigator = StackNavigator({ 
    Login: { screen: LoginScreen } 
}); 

const ModalStackNavigator = StackNavigator({ 
    MainTabNavigator:   { screen: MainTabNavigator   }, 
    LoginScreenStackNavigator: { screen: LoginRegisterStackNavigator } 
}, { 
    headerMode: 'none', 
    mode:  'modal' 
}); 

này cho phép tôi làm như sau (sử dụng Redux) trong Tab1ScreenTab2Screen để mang lại lên quan điểm phương thức từ bất cứ nơi nào tôi muốn:

this.props.navigation.navigate('LoginScreenStackNavigator'); 
+0

Bạn có thể gọi this.props từ bên trong một nút tab không? Làm sao? – IamLasse

+1

@IamLasse Bạn có nghĩa là từ một màn hình bên trong một tab hoặc chính nút tab? "Thật không may" tôi đã sử dụng redux vì vậy tôi nghĩ rằng tôi có một trường hợp khác :-) –

+0

Tôi cũng sử dụng redux. Nhưng tôi không thể gửi một sự kiện để mở chế độ bật lên hoặc gọi các đạo cụ từ trong ngăn điều hướng chính nơi cấu hình điều hướng. – IamLasse

0

Một cách để làm cho các thanh tab ra đi là để ẩn TabBar với visible: false:

const MyApp = TabNavigator({ 
    Home: { 
    screen: MyHomeScreen, 
    }, 
    TakePhoto: { 
    screen: PhotoPickerScreen, 
    navigationOptions: { 
     tabBar: { 
     visible: false, 
     }, 
    }, 
    }, 
}); 

Tuy nhiên, đó dường như không gây ra bất kỳ chuyển đổi sang toàn màn hình, mà tôi đoán là mong muốn?

Tùy chọn khác có thể là để bọc PhotoPickerScreen bên trong StackNavigator mới và đặt trình điều hướng đó thành chế độ = 'phương thức'.

Bạn có thể phải kích hoạt điều hướng với phương thức từ onPress trên TabItem bằng cách nào đó (ví dụ. navigation.navigate('TakePhoto').)

Lưu ý, tôi đang cố gắng để quấn quanh đầu tôi cách tốt nhất để cơ cấu chuyển hướng bản thân mình, vì vậy ...

Tùy chọn thứ ba, triển khai StackNavigator làm cha mẹ, sau đó thêm MyApp TabNavigator làm tuyến đường đầu tiên bên trong nó, có thể là giải pháp linh hoạt nhất. Sau đó, màn hình TakePhoto sẽ ở cùng mức với TabNavigator, cho phép bạn định tuyến đến bất cứ đâu.

Quan tâm để nghe những gì bạn nghĩ ra!

+0

Vâng tôi vẫn đang gặp vấn đề với bản thân mình - bạn có tìm cách thiết lập sự kiện onPress trên chính tab đó không?Tôi không thấy cách nào để chặn nút nhấn tab đó. – MonkeyBonkey

0

Documents là chắp vá ở một số khu vực, nhưng ở đây nó là:

export default class HomeScene extends Component { 

     static navigationOptions = { 
     title: 'foo', 
     header:{ 
        visible: true 
       } 
     } 
     .... 
     } 
9

Không chắc chắn nếu điều này vẫn còn có liên quan cho bạn, nhưng tôi đã quản lý để tìm ra đi để đạt được điều này.

Vì vậy, tôi đã quản lý để làm cho nó hoạt động bằng cách sử dụng tabBarComponent bên trong tabNavigatorConifg, bạn có thể ngăn điều hướng tab điều hướng tùy thuộc vào chỉ mục.

tabBarComponent: ({jumpToIndex, ...props, navigation}) => (
     <TabBarBottom 
      {...props} 
      jumpToIndex={index => { 
       if (index === 2) { 
        navigation.navigate('camera') 
       } 
       else { 
        jumpToIndex(index) 
       } 
      }} 
     /> 

    ) 

Một khi bạn đã làm điều này, phương pháp của tôi hiển thị các modally xem trên đầu trang của các quan điểm tab đã đặt tabnavigator bên trong một stacknavigatior và sau đó chỉ cần điều hướng đến một màn hình mới bên trong stacknavigator.

+0

Cảm ơn bạn rất nhiều người đàn ông;) –

+0

Tôi không nhận được phần này "Khi bạn đã thực hiện điều này, phương pháp hiển thị chế độ xem của tôi trên đầu trang của chế độ xem tab là đặt tabnavigator bên trong một stacknavigatior và sau đó chỉ cần điều hướng đến màn hình mới bên trong stacknavigator. " Bạn sẽ không đặt trình điều hướng ngăn xếp bên trong tab không nằm ngoài nó? – arcom

Các vấn đề liên quan