react-native/React/Views/UIView+React.h
Valentin Shergin 072d2709df Introducing -[RCTView reactAccessibleView]
Summary:
Sometimes, when we implement some custom RN view, we have to proxy all accessible atributes directly to some subview which actually has accesible content. So, in other words, this allows bypass some axillary views in terms of accessibility.
Concreate example which this approach supposed to fix:
https://github.com/facebook/react-native/pull/14200/files#diff-e5f6b1386b7ba07fd887bca11ec828a4R208

Reviewed By: mmmulani

Differential Revision: D5143860

fbshipit-source-id: 6d7ce747f28e5a31d32c925b8ad8fd4b98ce1de1
2017-06-02 14:19:57 -07:00

109 lines
3.0 KiB
Objective-C

/**
* Copyright (c) 2015-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*/
#import <UIKit/UIKit.h>
#import <React/RCTComponent.h>
@class RCTShadowView;
@interface UIView (React) <RCTComponent>
/**
* RCTComponent interface.
*/
- (NSArray<UIView *> *)reactSubviews NS_REQUIRES_SUPER;
- (UIView *)reactSuperview NS_REQUIRES_SUPER;
- (void)insertReactSubview:(UIView *)subview atIndex:(NSInteger)atIndex NS_REQUIRES_SUPER;
- (void)removeReactSubview:(UIView *)subview NS_REQUIRES_SUPER;
/**
* Layout direction of the view.
* Internally backed to `semanticContentAttribute` property.
* Defaults to `LeftToRight` in case of ambiguity.
*/
@property (nonatomic, assign) UIUserInterfaceLayoutDirection reactLayoutDirection;
/**
* The z-index of the view.
*/
@property (nonatomic, assign) NSInteger reactZIndex;
/**
* Subviews sorted by z-index. Note that this method doesn't do any caching (yet)
* and sorts all the views each call.
*/
- (NSArray<UIView *> *)reactZIndexSortedSubviews;
/**
* Updates the subviews array based on the reactSubviews. Default behavior is
* to insert the sortedReactSubviews into the UIView.
*/
- (void)didUpdateReactSubviews;
/**
* Used by the UIIManager to set the view frame.
* May be overriden to disable animation, etc.
*/
- (void)reactSetFrame:(CGRect)frame;
/**
* Used to improve performance when compositing views with translucent content.
*/
- (void)reactSetInheritedBackgroundColor:(UIColor *)inheritedBackgroundColor;
/**
* This method finds and returns the containing view controller for the view.
*/
- (UIViewController *)reactViewController;
/**
* This method attaches the specified controller as a child of the
* the owning view controller of this view. Returns NO if no view
* controller is found (which may happen if the view is not currently
* attached to the view hierarchy).
*/
- (void)reactAddControllerToClosestParent:(UIViewController *)controller;
/**
* Focus manipulation.
*/
- (void)reactFocus;
- (void)reactFocusIfNeeded;
- (void)reactBlur;
/**
* Useful properties for computing layout.
*/
@property (nonatomic, readonly) UIEdgeInsets reactBorderInsets;
@property (nonatomic, readonly) UIEdgeInsets reactPaddingInsets;
@property (nonatomic, readonly) UIEdgeInsets reactCompoundInsets;
@property (nonatomic, readonly) CGRect reactContentFrame;
/**
* The (sub)view which represents this view in terms of accessibility.
* ViewManager will apply all accessibility properties directly to this view.
* May be overriten in view subclass which needs to be accessiblitywise
* transparent in favour of some subview.
* Defaults to `self`.
*/
@property (nonatomic, readonly) UIView *reactAccessibilityElement;
#if RCT_DEV
/**
Tools for debugging
*/
@property (nonatomic, strong, setter=_DEBUG_setReactShadowView:) RCTShadowView *_DEBUG_reactShadowView;
#endif
@end