查看iOS视图层级并修改UIsearchBar的cancel按钮不失去作用

(lldb) po [self.searchBar recursiveDescription]
<UISearchBar: 0x7ff35854f370; frame = (0 64; 375 40); text = 'p'; opaque = NO; gestureRecognizers = <NSArray: 0x7ff358550380>; layer = <CALayer: 0x7ff35854f890>>
   | <UIView: 0x7ff35854fb90; frame = (0 0; 375 40); clipsToBounds = YES; autoresize = W+H; layer = <CALayer: 0x7ff35854fd00>>
   |    | <UISearchBarBackground: 0x7ff3585504d0; frame = (0 0; 375 40); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x7ff358550950>>
   |    | <UISearchBarTextField: 0x7ff358551480; frame = (8 6; 295 28); text = 'p'; clipsToBounds = YES; opaque = NO; gestureRecognizers = <NSArray: 0x7ff358553e80>; layer = <CALayer: 0x7ff358551850>>
   |    |    | <_UISearchBarSearchFieldBackgroundView: 0x7ff358785900; frame = (0 0; 295 28); opaque = NO; autoresize = W+H; userInteractionEnabled = NO; layer = <CALayer: 0x7ff3587432a0>>
   |    |    | <UIButton: 0x7ff358562e00; frame = (270.5 4.5; 19 19); opaque = NO; layer = <CALayer: 0x7ff358562d00>>
   |    |    |    | <UIImageView: 0x7ff358493320; frame = (2.5 2.5; 14 14); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x7ff3584934d0>>
   |    |    | <UIImageView: 0x7ff358784340; frame = (8 7.5; 13 13); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x7ff35877b4d0>>
   |    |    | <UITextFieldLabel: 0x7ff3585524b0; frame = (-10 -11; 11 0); text = 'p'; opaque = NO; userInteractionEnabled = NO; layer = <_UILabelLayer: 0x7ff3585526c0>>
   |    | <UINavigationButton: 0x7ff358470020; frame = (314 4; 53 30); opaque = NO; layer = <CALayer: 0x7ff35840ad70>>
   |    |    | <UIButtonLabel: 0x7ff35a82e430; frame = (0 5; 53 20.5); text = 'Cancel'; opaque = NO; userInteractionEnabled = NO; layer = <_UILabelLayer: 0x7ff35a82e6e0>>

//UINavigationButton是私有类,可以使用NSClassFromString转换过来
for (UIView *view in [[[self.searchBar subviews] objectAtIndex:0] subviews]) {
        
        if ([view isKindOfClass:[NSClassFromString(@"UINavigationButton") class]]) {
            UIButton *btn = (UIButton *)view;
            btn.enabled = YES;
        }

}
原文地址:https://www.cnblogs.com/wobuyayi/p/5651078.html