diff --git a/docs/screen-api.md b/docs/screen-api.md index 8c67557f21b..c015df0e746 100644 --- a/docs/screen-api.md +++ b/docs/screen-api.md @@ -259,12 +259,20 @@ this.props.navigator.toggleNavBar({ ## setOnNavigatorEvent(callback) Set a handler for navigator events (like nav button press). This would normally go in your component constructor. +Can not be used in conjuction with `addOnNavigatorEvent`. ```js // this.onNavigatorEvent will be our handler this.props.navigator.setOnNavigatorEvent(this.onNavigatorEvent.bind(this)); ``` +## addOnNavigatorEvent(callback) + +Add a handler for navigator events (like nav button press). This would normally go in your component constructor. +If you choose to use `addOnNavigatorEvent` instead of `setOnNavigatorEvent` you will be able to add multiple handlers. +Bear in mind that you can't use both `addOnNavigatorEvent` and `setOnNavigatorEvent`. +`addOnNavigatorEvent` returns a function, that once called will remove the registered handler. + # Screen Visibility `const isVisible = await this.props.navigator.screenIsCurrentlyVisible()` diff --git a/src/Screen.js b/src/Screen.js index 5e7c3f4a8e3..93c97b97650 100644 --- a/src/Screen.js +++ b/src/Screen.js @@ -143,7 +143,7 @@ class Navigator { setOnNavigatorEvent(callback) { if (this.navigatorEventHandlers.length > 0) { - throw 'setOnNavigatorEvent can not be used after addOnNavigatorEvent has been called'; + throw new Error('setOnNavigatorEvent can not be used after addOnNavigatorEvent has been called'); } this.navigatorEventHandler = callback; this._registerNavigatorEvent(); @@ -151,12 +151,15 @@ class Navigator { addOnNavigatorEvent(callback) { if (this.navigatorEventHandler) { - throw 'addOnNavigatorEvent can not be used after setOnNavigatorEvent has been called'; + throw new Error('addOnNavigatorEvent can not be used after setOnNavigatorEvent has been called'); } if (this.navigatorEventHandlers.indexOf(callback) === -1) { this.navigatorEventHandlers.push(callback); } this._registerNavigatorEvent(); + + return () => this._removeOnNavigatorEvent(callback) + } _registerNavigatorEvent() { @@ -167,7 +170,7 @@ class Navigator { } } - removeOnNavigatorEvent(callback) { + _removeOnNavigatorEvent(callback) { const index = this.navigatorEventHandlers.indexOf(callback); if (index !== -1) { this.navigatorEventHandlers.splice(index, 1);