@@ -62,13 +62,52 @@ - (void)setNavigationBarClipsToBounds:(BOOL)clipsToBounds {
6262 self.navigationBar .clipsToBounds = clipsToBounds;
6363}
6464
65- - (void ) setBackButtonTestID : ( NSString *)testID {
66- UIView *navigationBarContentView =
65+ - (UIView *)rnn_findBackButtonView {
66+ UIView *contentView =
6767 [self .navigationBar findChildByClass: NSClassFromString (@" _UINavigationBarContentView" )];
68- UIView *barButton =
69- [navigationBarContentView findChildByClass: NSClassFromString (@" _UIButtonBarButton" )];
70- if (barButton)
71- barButton.accessibilityIdentifier = testID;
68+ if (!contentView) {
69+ contentView =
70+ [self .navigationBar findChildByClass: NSClassFromString (@" UIKit.NavigationBarContentView" )];
71+ }
72+ if (!contentView)
73+ return nil ;
74+
75+ Class buttonClass = NSClassFromString (@" _UIButtonBarButton" );
76+
77+ return [contentView findDescendantByClass: buttonClass
78+ passingTest: ^BOOL (UIView *view) {
79+ if ([view respondsToSelector: NSSelectorFromString (@" isBackButton" )]) {
80+ return [[view valueForKey: @" backButton" ] boolValue ];
81+ }
82+ return YES ;
83+ }];
84+ }
85+
86+ - (void )rnn_applyTestID : (NSString *)testID toBackButtonView : (UIView *)barButton {
87+ barButton.accessibilityIdentifier = testID;
88+ barButton.isAccessibilityElement = YES ;
89+ }
90+
91+ - (void )setBackButtonTestID : (NSString *)testID {
92+ if (!testID)
93+ return ;
94+
95+ UIView *barButton = [self rnn_findBackButtonView ];
96+ if (barButton) {
97+ [self rnn_applyTestID: testID toBackButtonView: barButton];
98+ } else {
99+ __weak UINavigationController *weakSelf = self;
100+ dispatch_after (dispatch_time (DISPATCH_TIME_NOW, (int64_t )(0.15 * NSEC_PER_SEC)),
101+ dispatch_get_main_queue (), ^{
102+ UINavigationController *nc = weakSelf;
103+ if (!nc)
104+ return ;
105+ UIView *btn = [nc rnn_findBackButtonView ];
106+ if (btn) {
107+ [nc rnn_applyTestID: testID toBackButtonView: btn];
108+ }
109+ });
110+ }
72111}
73112
74113- (CGFloat)getTopBarHeight {
0 commit comments