diff --git a/Libraries/Components/ScrollResponder.js b/Libraries/Components/ScrollResponder.js index 65531aa2f..52c6c946b 100644 --- a/Libraries/Components/ScrollResponder.js +++ b/Libraries/Components/ScrollResponder.js @@ -347,6 +347,17 @@ var ScrollResponderMixin = { return isAnimating; }, + /** + * Returns the node that represents native view that can be scrolled. + * Components can pass what node to use by defining a `getScrollableNode` + * function otherwise `this` is used. + */ + scrollResponderGetScrollableNode: function(): any { + return this.getScrollableNode ? + this.getScrollableNode() : + React.findNodeHandle(this); + }, + /** * A helper function to scroll to a specific point in the scrollview. * This is currently used to help focus on child textviews, but can also @@ -369,7 +380,7 @@ var ScrollResponderMixin = { ({x, y, animated} = x || {}); } UIManager.dispatchViewManagerCommand( - React.findNodeHandle(this), + this.scrollResponderGetScrollableNode(), UIManager.RCTScrollView.Commands.scrollTo, [x || 0, y || 0, animated !== false], ); @@ -401,7 +412,7 @@ var ScrollResponderMixin = { } else if (typeof animated !== 'undefined') { console.warn('`scrollResponderZoomTo` `animated` argument is deprecated. Use `options.animated` instead'); } - ScrollViewManager.zoomToRect(React.findNodeHandle(this), rect, animated !== false); + ScrollViewManager.zoomToRect(this.scrollResponderGetScrollableNode(), rect, animated !== false); } }, diff --git a/Libraries/Components/ScrollView/ScrollView.js b/Libraries/Components/ScrollView/ScrollView.js index 279712808..d9d710246 100644 --- a/Libraries/Components/ScrollView/ScrollView.js +++ b/Libraries/Components/ScrollView/ScrollView.js @@ -355,6 +355,10 @@ var ScrollView = React.createClass({ return this; }, + getScrollableNode: function(): any { + return React.findNodeHandle(this.refs[SCROLLVIEW]); + }, + getInnerViewNode: function(): any { return React.findNodeHandle(this.refs[INNERVIEW]); },