[iOS] Allow set view controllers to be called with multiple components (#2247)
* Refactor resetTo view controller creation into function
This will allow for multiple view controllers to call the same function to create their instance.
* Configure resetTo to take multiple components to set view controllers for
This allows for a navigation stack to be recreated with multiple view controllers rather than just one.
* Breakup view controller initializer into multiple lines for legibility
* setTabButton -> has now the property 'label' to change the label of the TabButton
* Add to documentation
* [BugFix] use i instead of 0 to check all TabItems
* setStyle -> to change bottomTabBar
* update android
* remove hass...-functions
* update iOS set TabStyle
* iOS change icon color on buttonTabColor has been changed
* iOS update style-update rutine to update each viewcontroller in a NavigationViewController
tabButtonColor improvement
* iOS add forgotten header declaration
* iOS fix c&p error
* [Android] initialize colors for an empty AppStyles-Object
* [Android] fix update style of tabbar on display screen
* [Android] revert eventbus changes
[Android] apply guyca's solution
* [Android] rn 50 compatibility
* remove comment
* Preview API
* Added preview actions and fail-guard wrappers
* Remove old setters
* Moved from passProps to actionParams
* Move findNodeHandle to internal method
* Removing findNodeHandle
* Added height and option to dont 'pop' the view controller
* Documentation update for peek and pop
* Document how to access button press events
* Commit by default in example. Because it's cool
* Docs and if elses ifs then
* Unregister previous ViewController on attempt to preview.
* Merge conflict fail
setTabButton -> has now the property 'label' to change the label of the TabButton
iOS update style-update rutine to update each viewcontroller in a NavigationViewController
tabButtonColor improvement
Add the preview and pop feature
To use the feature you simply call `navigator.push()` but with additional parameter `previewViewID` which is a React Node.
```js
<TouchableOpacity
onPressIn={() => this.props.navigator.push({
screen: 'screenid',
previewView: this.viewRef,
previewActions: [{
title: 'Foo',
style: 'selected', // none, selected, destructive
actions: [{ title: 'Bar' }],
}],
})
/>
```
* added method for getting the currently visible screen ID. Can be useful to decide if logic should be applied according to screen visibility, for example: set buttons/title dynamically, or even determine that you don’t need to show the same screen again if it’s the current one that’s showing
* Implement getCurrentlyVisibleScreenId on Android
Can be used statically:
Navigation.getCurrentlyVisibleScreenId() - returns the unique screen
instance id
With a navigator instance:
await this.props.navigator.screenIsCurrentlyVisible() - resolves a
promise that checks if the current screen is visible
* Add screen visibility listener which can be registered globally
API
new ScreenVisibilityListener({
willAppear: ({screen, timestamp}) => console.log(`Displaying screen ${screen}`),
didAppear: ({screen, timestamp}) => console.log(`Screen ${screen} displayed in ${Date.now() - timestamp} millis`)
}).register();
todo
* Add timestamp to modal, resetTo
* implement unregister
* implement iOS
* Add global screen visibility listener to example app
* Think I better assign a value to emitter
* Send timestamp in resetTo
* Moved listener to library, it can be deleted from the app
* Add push and resetTo buttons to pushed screens
* Send appear/disappear events after animation ends
* Pass pop timestamp from js
* Send timestamp in popToRoot
* Add popToRoot button in push screen
* Add few navigation buttons to modal screen
* Pass timestamp to tabs
relevant only to first/initial tab
* Update timestamp when navigating between BottomTabs
* Send screen visible events after modal dismiss
* log willDisappear and didDisappear
* Report both start and end timestamps
* Implement unregister
* Send NavigationType parameter in visibilityEvent
This indicates the type of the navigation command that triggered the visibility change
* Rename pushInitialScreen to more explicit name
* Fix duplicate initialScreen visibility events
* Update screen visibility log statement
* Show popToRoot in modal screen only if screens were pushed
* implement global screen event for iOS
* fix lint issues
Add ability to set attributes of navigation bar buttons separately. (#937)
* Add ability to set attributes of navigation bar buttons separately.
* Added ability to set button style when calling `setButtons` method.
* Add documentation.
* Set to use old bridge for compatibility with 0.30+
* Fixed crash occurring when tabBarBackgroundColor or tabBarButtonColor is not supplied
* Adds setStyle property to index.js
* Adds native code for setting style on RCCViewController
* Fixes setStyle function
* Fixes setting style on navigator
* Adds some styling to tab bar controller and fixes some bugs
* Adds ability to set modal presentation style
* Makes sure autoAdjustScrollViewInsets isn't propagated through when push another view controller
* Changes import to reference controllers rather than react-native-controllers and fixes setStyle mutating colours
* Fixed to work with RN 33
* Fixes updating title font styling with new RCCTitleViewHelper logic
* Fixes subtitle being shown
* Adds extendedLayoutIncludesOpaqueBars to navigation styling
* Adds ability to add shadows to text in navigation bar / tab bar
* Fixed merged ReactGateway.java file
* Fixed issue with rightButtons getting ignored in preference for empty Screen buttons
* Fixes compiler error
added status bar color scheme for single screen which isn't pass on p… (#608)
* added status bar color scheme for single screen which isn't pass on push. Set "statusBarTextColorSchemeSingleScreen" on the navigatorStyle
* make statusBarTextColorSchemeSingleScreen preferred option when both statusBarTextColorScheme and statusBarTextColorSchemeSingleScreen are exists