blob: 3b079dba496b4f2a043c11aa5311d6ca33b6a8e2 [file]
/*
Copyright 2016-present the Material Components for iOS authors. All Rights Reserved.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
#import <UIKit/UIKit.h>
@class MDCCollectionInfoBarView;
/** The info bar supplementary view kind when shown in header. */
extern NSString *_Nonnull const MDCCollectionInfoBarKindHeader;
/** The info bar supplementary view kind when shown in footer. */
extern NSString *_Nonnull const MDCCollectionInfoBarKindFooter;
/** The animation duration for the info bar. */
extern const CGFloat MDCCollectionInfoBarAnimationDuration;
/** Height for the info bar when shown in header. */
extern const CGFloat MDCCollectionInfoBarHeaderHeight;
/** Height for the info bar when shown in footer. */
extern const CGFloat MDCCollectionInfoBarFooterHeight;
/** The available styles that the info bar can be shown within a collectionView. */
typedef NS_ENUM(NSUInteger, MDCCollectionInfoBarViewStyle) {
MDCCollectionInfoBarViewStyleActionable,
MDCCollectionInfoBarViewStyleHUD
};
/** Delegate protocol for the MDCCollectionInfoBarView. */
@protocol MDCCollectionInfoBarViewDelegate <NSObject>
@required
/**
Allows the receiver to update the info bar after it has been created.
@param infoBar The MDCCollectionInfoBarView info bar.
*/
- (void)updateControllerWithInfoBar:(nonnull MDCCollectionInfoBarView *)infoBar;
@optional
/**
Allows the receiver to get notifed when a tap gesture has been performed on the info bar.
@param infoBar The MDCCollectionInfoBarView info bar.
*/
- (void)didTapInfoBar:(nonnull MDCCollectionInfoBarView *)infoBar;
/**
Allows the receiver to get notifed when an info bar will show.
@param infoBar The MDCCollectionInfoBarView info bar.
@param animated YES the transition will be animated; otherwise, NO.
@param willAutoDismiss YES the info bar will be auto-dismissed after the time interval
set in @c autoDismissAfterDuration.
*/
- (void)infoBar:(nonnull MDCCollectionInfoBarView *)infoBar
willShowAnimated:(BOOL)animated
willAutoDismiss:(BOOL)willAutoDismiss;
/**
Allows the receiver to get notifed after an info bar did show.
@param infoBar The MDCCollectionInfoBarView info bar.
@param animated YES the transition was animated; otherwise, NO.
@param willAutoDismiss YES the info bar will be auto-dismissed after the time interval
set in @c autoDismissAfterDuration.
*/
- (void)infoBar:(nonnull MDCCollectionInfoBarView *)infoBar
didShowAnimated:(BOOL)animated
willAutoDismiss:(BOOL)willAutoDismiss;
/**
Allows the receiver to get notifed when an info bar will dismiss.
@param infoBar The MDCCollectionInfoBarView info bar.
@param animated YES the transition will be animated; otherwise, NO.
@param willAutoDismiss YES the info bar will be auto-dismissed after the time interval
set in @c autoDismissAfterDuration.
*/
- (void)infoBar:(nonnull MDCCollectionInfoBarView *)infoBar
willDismissAnimated:(BOOL)animated
willAutoDismiss:(BOOL)willAutoDismiss;
/**
Allows the receiver to get notifed after an info bar has been dismissed.
@param infoBar The MDCCollectionInfoBarView info bar.
@param animated YES the transition was animated; otherwise, NO.
@param didAutoDismiss YES the info bar was auto-dismissed.
*/
- (void)infoBar:(nonnull MDCCollectionInfoBarView *)infoBar
didDismissAnimated:(BOOL)animated
didAutoDismiss:(BOOL)didAutoDismiss;
@end
/**
The MDCCollectionInfoBarView class provides an implementation of
UICollectionReusableView that displays an animated view in either the header
or footer.
*/
@interface MDCCollectionInfoBarView : UICollectionReusableView
/** A delegate through which the MDCCollectionInfoBarView may inform of updates. */
@property(nonatomic, weak, nullable) id<MDCCollectionInfoBarViewDelegate> delegate;
/** The background view containing the message label. This view is animatable on show/dismiss. */
@property(nonatomic, readonly, strong, nullable) UIView *backgroundView;
/** Whether the background view should be shown with a shadow. */
@property(nonatomic, assign) BOOL shouldApplyBackgroundViewShadow;
/**
The color assigned to the background view.
Defaults to #448AFF for header, and white for footer.
*/
@property(nonatomic, strong, null_resettable) UIColor *tintColor;
/**
The color assigned to the info bar message label.
Defaults to white for header, and #F44336 for footer.
*/
@property(nonatomic, strong, nullable) UIColor *titleColor;
/** The info bar message label. */
@property(nonatomic, readonly, strong, nullable) UILabel *titleLabel;
/** The info bar message text. */
@property(nonatomic, strong, nullable) NSString *message;
/** The horizontal position of bar message. */
@property(nonatomic, assign) NSTextAlignment textAlignment;
/** Whether the background view can receive a tap gesture. */
@property(nonatomic, assign) BOOL allowsTap;
/** The optional style that the info bar can be shown. */
@property(nonatomic, assign) MDCCollectionInfoBarViewStyle style;
/**
The info bar supplementary view kind as set by the collectionView model
|collectionView:viewForSupplementaryElementOfKind:atIndexPath| method. Possible values
are MDCCollectionInfoBarKindHeader or MDCCollectionInfoBarKindFooter.
*/
@property(nonatomic, strong, nonnull) NSString *kind;
/**
The desired duration after which the info bar will be automatically dismissed. If set to
0, autoDismiss will be ignored.
*/
@property(nonatomic, assign) NSTimeInterval autoDismissAfterDuration;
/** Whether the info bar is currently being shown. */
@property(nonatomic, readonly, assign) BOOL isVisible;
/**
Shows the info bar with/without animation.
@param animated YES the transition will be animated; otherwise, NO.
*/
- (void)showAnimated:(BOOL)animated;
/**
Dismisses the info bar with/without animation.
@param animated YES the transition will be animated; otherwise, NO.
*/
- (void)dismissAnimated:(BOOL)animated;
@end