UIBarItem(QMUI)

@interface UIBarItem (QMUI)

/**
 获取 UIBarItem(UIBarButtonItem、UITabBarItem) 内部的 view,通常对于 navigationItem 而言,需要在设置了 navigationItem 后并且在 navigationBar 可见时(例如 viewDidAppear: 及之后)获取 UIBarButtonItem.qmui_view 才有值。
 
 @return 当 UIBarButtonItem 作为 navigationItem 使用时,iOS 10 及以前返回 UINavigationButton,iOS 11 及以后返回 _UIButtonBarButton;当作为 toolbarItem 使用时,iOS 10 及以前返回 UIToolbarButton,iOS 11 及以后返回 _UIButtonBarButton。对于 UITabBarItem,不管任何 iOS 版本均返回 UITabBarButton。
 
 @note 可以通过 qmui_viewDidSetBlock 监听 qmui_view 值的变化,从而无需等待 viewDidAppear: 之类的时机。
 
 @warning 仅对 UIBarButtonItem、UITabBarItem 有效
 */
@property(nullable, nonatomic, weak, readonly) UIView *qmui_view;

/**
 当 item 内的 view 生成后就会调用这个 block。
 
 @note 该方法的本质是系统的 setView:/setCustomView: 被调用时就会调用,但系统在横竖屏旋转时也会再次走到 setView:(即便此时 view 的实例并没有发生变化),所以 QMUI 对这种情况做了屏蔽,以保证这个 block 对于同一个 view 实例只会被调用一次。
 
 @warning 仅对 UIBarButtonItem、UITabBarItem 有效
 */
@property(nullable, nonatomic, copy) void (^qmui_viewDidSetBlock)(__kindof UIBarItem *item,  UIView * _Nullable view);

/**
 当 item 内的 view 的 layoutSubviews 被调用后就会调用这个 block,如果某些需求需要依赖于 subviews 的位置,则使用这个 block。如果只是依赖于 item 的 view 的 frame 变化,则可以使用 qmui_viewLayoutDidChangeBlock。
 
 @warning 仅对 UIBarButtonItem、UITabBarItem 有效
 */
@property(nullable, nonatomic, copy) void (^qmui_viewDidLayoutSubviewsBlock)(__kindof UIBarItem *item, UIView * _Nullable view);

/**
 当 item 内的 view 的 frame 发生变化时就会调用这个 block。
 
 @warning 仅对 UIBarButtonItem、UITabBarItem 有效
 */
@property(nullable, nonatomic, copy) void (^qmui_viewLayoutDidChangeBlock)(__kindof UIBarItem *item, UIView * _Nullable view);

@end

Undocumented

  • 获取 UIBarItem(UIBarButtonItem、UITabBarItem) 内部的 view,通常对于 navigationItem 而言,需要在设置了 navigationItem 后并且在 navigationBar 可见时(例如 viewDidAppear: 及之后)获取 UIBarButtonItem.qmui_view 才有值。

    Note

    可以通过 qmui_viewDidSetBlock 监听 qmui_view 值的变化,从而无需等待 viewDidAppear: 之类的时机。

    Warning

    仅对 UIBarButtonItem、UITabBarItem 有效

    Declaration

    Objective-C

    @property (nonatomic, weak, readonly, nullable) UIView *qmui_view;

    Swift

    weak var qmui_view: UIView? { get }

    Return Value

    当 UIBarButtonItem 作为 navigationItem 使用时,iOS 10 及以前返回 UINavigationButton,iOS 11 及以后返回 _UIButtonBarButton;当作为 toolbarItem 使用时,iOS 10 及以前返回 UIToolbarButton,iOS 11 及以后返回 _UIButtonBarButton。对于 UITabBarItem,不管任何 iOS 版本均返回 UITabBarButton。

  • 当 item 内的 view 生成后就会调用这个 block。

    Note

    该方法的本质是系统的 setView:/setCustomView: 被调用时就会调用,但系统在横竖屏旋转时也会再次走到 setView:(即便此时 view 的实例并没有发生变化),所以 QMUI 对这种情况做了屏蔽,以保证这个 block 对于同一个 view 实例只会被调用一次。

    Warning

    仅对 UIBarButtonItem、UITabBarItem 有效

    Declaration

    Objective-C

    @property (nonatomic, copy, nullable) void (^) (__kindof UIBarItem *_Nonnull, UIView *_Nullable) qmui_viewDidSetBlock;

    Swift

    var qmui_viewDidSetBlock: ((UIBarItem, UIView?) -> Void)? { get set }
  • 当 item 内的 view 的 layoutSubviews 被调用后就会调用这个 block,如果某些需求需要依赖于 subviews 的位置,则使用这个 block。如果只是依赖于 item 的 view 的 frame 变化,则可以使用 qmui_viewLayoutDidChangeBlock。

    Warning

    仅对 UIBarButtonItem、UITabBarItem 有效

    Declaration

    Objective-C

    @property (nonatomic, copy, nullable) void (^) (__kindof UIBarItem *_Nonnull, UIView *_Nullable) qmui_viewDidLayoutSubviewsBlock;

    Swift

    var qmui_viewDidLayoutSubviewsBlock: ((UIBarItem, UIView?) -> Void)? { get set }
  • 当 item 内的 view 的 frame 发生变化时就会调用这个 block。

    Warning

    仅对 UIBarButtonItem、UITabBarItem 有效

    Declaration

    Objective-C

    @property (nonatomic, copy, nullable) void (^) (__kindof UIBarItem *_Nonnull, UIView *_Nullable) qmui_viewLayoutDidChangeBlock;

    Swift

    var qmui_viewLayoutDidChangeBlock: ((UIBarItem, UIView?) -> Void)? { get set }