Commit 90f77b87b29ae895a2f10fbfd38c44368145a419

Authored by yinqiaojuan
1 parent 6e6e98b8

0.0.3

CNLiveTips.podspec
... ... @@ -2,7 +2,7 @@
2 2  
3 3 Pod::Spec.new do |s|
4 4 s.name = 'CNLiveTips'
5   - s.version = '0.0.2'
  5 + s.version = '0.0.3'
6 6 s.summary = '封装QMUI弹框'
7 7  
8 8  
... ...
CNLiveTips/Classes/CNLiveShowTips.h 0 → 100644
  1 +//
  2 +// CNLiveTips.h
  3 +// CNLiveNetAdd
  4 +//
  5 +// Created by 殷巧娟 on 2018/12/25.
  6 +// Copyright © 2018年 cnlive. All rights reserved.
  7 +//
  8 +
  9 +#import "CNLiveToastView.h"
  10 +
  11 +NS_ASSUME_NONNULL_BEGIN
  12 +// 自动计算秒数的标志符,在 delay 里面赋值 QMUITipsAutomaticallyHideToastSeconds 即可通过自动计算 tips 消失的秒数
  13 +extern const NSInteger QMUITipsAutomaticallyHideToastSeconds;
  14 +
  15 +/// 默认的 parentView
  16 +#define DefaultTipsParentView [[[UIApplication sharedApplication] delegate] window]
  17 +
  18 +/**
  19 + * 简单封装了 QMUIToastView,支持弹出纯文本、loading、succeed、error、info 等五种 tips。如果这些接口还满足不了业务的需求,可以通过 QMUITips 的分类自行添加接口。
  20 + * 注意用类方法显示 tips 的话,会导致父类的 willShowBlock 无法正常工作,具体请查看 willShowBlock 的注释。
  21 + * @see [QMUIToastView willShowBlock]
  22 + */
  23 +@interface CNLiveShowTips : CNLiveToastView
  24 +/// 实例方法:需要自己addSubview,hide之后不会自动removeFromSuperView
  25 +
  26 +- (void)showLoading;
  27 +- (void)showLoading:(nullable NSString *)text;
  28 +- (void)showLoadingHideAfterDelay:(NSTimeInterval)delay;
  29 +- (void)showLoading:(nullable NSString *)text hideAfterDelay:(NSTimeInterval)delay;
  30 +- (void)showLoading:(nullable NSString *)text detailText:(nullable NSString *)detailText;
  31 +- (void)showLoading:(nullable NSString *)text detailText:(nullable NSString *)detailText hideAfterDelay:(NSTimeInterval)delay;
  32 +
  33 +- (void)showWithText:(nullable NSString *)text;
  34 +- (void)showWithText:(nullable NSString *)text hideAfterDelay:(NSTimeInterval)delay;
  35 +- (void)showWithText:(nullable NSString *)text detailText:(nullable NSString *)detailText;
  36 +- (void)showWithText:(nullable NSString *)text detailText:(nullable NSString *)detailText hideAfterDelay:(NSTimeInterval)delay;
  37 +
  38 +- (void)showSucceed:(nullable NSString *)text;
  39 +- (void)showSucceed:(nullable NSString *)text hideAfterDelay:(NSTimeInterval)delay;
  40 +- (void)showSucceed:(nullable NSString *)text detailText:(nullable NSString *)detailText;
  41 +- (void)showSucceed:(nullable NSString *)text detailText:(nullable NSString *)detailText hideAfterDelay:(NSTimeInterval)delay;
  42 +
  43 +- (void)showError:(nullable NSString *)text;
  44 +- (void)showError:(nullable NSString *)text hideAfterDelay:(NSTimeInterval)delay;
  45 +- (void)showError:(nullable NSString *)text detailText:(nullable NSString *)detailText;
  46 +- (void)showError:(nullable NSString *)text detailText:(nullable NSString *)detailText hideAfterDelay:(NSTimeInterval)delay;
  47 +
  48 +- (void)showInfo:(nullable NSString *)text;
  49 +- (void)showInfo:(nullable NSString *)text hideAfterDelay:(NSTimeInterval)delay;
  50 +- (void)showInfo:(nullable NSString *)text detailText:(nullable NSString *)detailText;
  51 +- (void)showInfo:(nullable NSString *)text detailText:(nullable NSString *)detailText hideAfterDelay:(NSTimeInterval)delay;
  52 +
  53 +/// 类方法:主要用在局部一次性使用的场景,hide之后会自动removeFromSuperView
  54 +
  55 ++ (CNLiveShowTips *)createTipsToView:(UIView *)view;
  56 +
  57 ++ (CNLiveShowTips *)showLoadingInView:(UIView *)view;
  58 ++ (CNLiveShowTips *)showLoading:(nullable NSString *)text inView:(UIView *)view;
  59 ++ (CNLiveShowTips *)showLoadingInView:(UIView *)view hideAfterDelay:(NSTimeInterval)delay;
  60 ++ (CNLiveShowTips *)showLoading:(nullable NSString *)text inView:(UIView *)view hideAfterDelay:(NSTimeInterval)delay;
  61 ++ (CNLiveShowTips *)showLoading:(nullable NSString *)text detailText:(nullable NSString *)detailText inView:(UIView *)view;
  62 ++ (CNLiveShowTips *)showLoading:(nullable NSString *)text detailText:(nullable NSString *)detailText inView:(UIView *)view hideAfterDelay:(NSTimeInterval)delay;
  63 +
  64 ++ (CNLiveShowTips *)showWithText:(nullable NSString *)text;
  65 ++ (CNLiveShowTips *)showWithText:(nullable NSString *)text detailText:(nullable NSString *)detailText;
  66 ++ (CNLiveShowTips *)showWithText:(nullable NSString *)text inView:(UIView *)view;
  67 ++ (CNLiveShowTips *)showWithText:(nullable NSString *)text inView:(UIView *)view hideAfterDelay:(NSTimeInterval)delay;
  68 ++ (CNLiveShowTips *)showWithText:(nullable NSString *)text detailText:(nullable NSString *)detailText inView:(UIView *)view;
  69 ++ (CNLiveShowTips *)showWithText:(nullable NSString *)text detailText:(nullable NSString *)detailText inView:(UIView *)view hideAfterDelay:(NSTimeInterval)delay;
  70 +
  71 ++ (CNLiveShowTips *)showSucceed:(nullable NSString *)text;
  72 ++ (CNLiveShowTips *)showSucceed:(nullable NSString *)text detailText:(nullable NSString *)detailText;
  73 ++ (CNLiveShowTips *)showSucceed:(nullable NSString *)text inView:(UIView *)view;
  74 ++ (CNLiveShowTips *)showSucceed:(nullable NSString *)text inView:(UIView *)view hideAfterDelay:(NSTimeInterval)delay;
  75 ++ (CNLiveShowTips *)showSucceed:(nullable NSString *)text detailText:(nullable NSString *)detailText inView:(UIView *)view;
  76 ++ (CNLiveShowTips *)showSucceed:(nullable NSString *)text detailText:(nullable NSString *)detailText inView:(UIView *)view hideAfterDelay:(NSTimeInterval)delay;
  77 +
  78 ++ (CNLiveShowTips *)showError:(nullable NSString *)text;
  79 ++ (CNLiveShowTips *)showError:(nullable NSString *)text detailText:(nullable NSString *)detailText;
  80 ++ (CNLiveShowTips *)showError:(nullable NSString *)text inView:(UIView *)view;
  81 ++ (CNLiveShowTips *)showError:(nullable NSString *)text inView:(UIView *)view hideAfterDelay:(NSTimeInterval)delay;
  82 ++ (CNLiveShowTips *)showError:(nullable NSString *)text detailText:(nullable NSString *)detailText inView:(UIView *)view;
  83 ++ (CNLiveShowTips *)showError:(nullable NSString *)text detailText:(nullable NSString *)detailText inView:(UIView *)view hideAfterDelay:(NSTimeInterval)delay;
  84 +
  85 ++ (CNLiveShowTips *)showInfo:(nullable NSString *)text;
  86 ++ (CNLiveShowTips *)showInfo:(nullable NSString *)text detailText:(nullable NSString *)detailText;
  87 ++ (CNLiveShowTips *)showInfo:(nullable NSString *)text inView:(UIView *)view;
  88 ++ (CNLiveShowTips *)showInfo:(nullable NSString *)text inView:(UIView *)view hideAfterDelay:(NSTimeInterval)delay;
  89 ++ (CNLiveShowTips *)showInfo:(nullable NSString *)text detailText:(nullable NSString *)detailText inView:(UIView *)view;
  90 ++ (CNLiveShowTips *)showInfo:(nullable NSString *)text detailText:(nullable NSString *)detailText inView:(UIView *)view hideAfterDelay:(NSTimeInterval)delay;
  91 +
  92 +/// 隐藏 tips
  93 ++ (void)hideAllTipsInView:(UIView *)view;
  94 ++ (void)hideAllTips;
  95 +
  96 +/// 自动隐藏 toast 可以使用这个方法自动计算秒数
  97 ++ (NSTimeInterval)smartDelaySecondsForTipsText:(NSString *)text;
  98 +@end
  99 +
  100 +NS_ASSUME_NONNULL_END
... ...
CNLiveTips/Classes/CNLiveShowTips.m 0 → 100644
  1 +//
  2 +// CNLiveTips.m
  3 +// CNLiveNetAdd
  4 +//
  5 +// Created by 殷巧娟 on 2018/12/25.
  6 +// Copyright © 2018年 cnlive. All rights reserved.
  7 +//
  8 +
  9 +#import "CNLiveShowTips.h"
  10 +#import <QMUIKit/QMUIKit.h>
  11 +#import "QMUICore.h"
  12 +#import "QMUIToastContentView.h"
  13 +#import "QMUIToastBackgroundView.h"
  14 +#import "NSString+QMUI.h"
  15 +const NSInteger QMUITipsAutomaticallyHideToastSeconds = -1;
  16 +
  17 +@interface CNLiveShowTips ()
  18 +@property(nonatomic, strong) UIView *contentCustomView;
  19 +@end
  20 +
  21 +@implementation CNLiveShowTips
  22 +- (void)showLoading {
  23 + [self showLoading:nil hideAfterDelay:0];
  24 +}
  25 +
  26 +- (void)showLoadingHideAfterDelay:(NSTimeInterval)delay {
  27 + [self showLoading:nil hideAfterDelay:delay];
  28 +}
  29 +
  30 +- (void)showLoading:(NSString *)text {
  31 + [self showLoading:text hideAfterDelay:0];
  32 +}
  33 +
  34 +- (void)showLoading:(NSString *)text hideAfterDelay:(NSTimeInterval)delay {
  35 + [self showLoading:text detailText:nil hideAfterDelay:delay];
  36 +}
  37 +
  38 +- (void)showLoading:(NSString *)text detailText:(NSString *)detailText {
  39 + [self showLoading:text detailText:detailText hideAfterDelay:0];
  40 +}
  41 +- (void)showLoading:(NSString *)text detailText:(NSString *)detailText hideAfterDelay:(NSTimeInterval)delay {
  42 + UIActivityIndicatorView *indicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
  43 + [indicator startAnimating];
  44 + self.contentCustomView = indicator;
  45 + [self showTipWithText:text detailText:detailText hideAfterDelay:delay];
  46 +}
  47 +
  48 +- (void)showWithText:(NSString *)text {
  49 + [self showWithText:text detailText:nil hideAfterDelay:0];
  50 +}
  51 +
  52 +- (void)showWithText:(NSString *)text hideAfterDelay:(NSTimeInterval)delay {
  53 + [self showWithText:text detailText:nil hideAfterDelay:delay];
  54 +}
  55 +
  56 +- (void)showWithText:(NSString *)text detailText:(NSString *)detailText {
  57 + [self showWithText:text detailText:detailText hideAfterDelay:0];
  58 +}
  59 +
  60 +- (void)showWithText:(NSString *)text detailText:(NSString *)detailText hideAfterDelay:(NSTimeInterval)delay {
  61 + self.contentCustomView = nil;
  62 + [self showTipWithText:text detailText:detailText hideAfterDelay:delay];
  63 +}
  64 +
  65 +- (void)showSucceed:(NSString *)text {
  66 + [self showSucceed:text detailText:nil hideAfterDelay:0];
  67 +}
  68 +
  69 +- (void)showSucceed:(NSString *)text hideAfterDelay:(NSTimeInterval)delay {
  70 + [self showSucceed:text detailText:nil hideAfterDelay:delay];
  71 +}
  72 +
  73 +- (void)showSucceed:(NSString *)text detailText:(NSString *)detailText {
  74 + [self showSucceed:text detailText:detailText hideAfterDelay:0];
  75 +}
  76 +
  77 +- (void)showSucceed:(NSString *)text detailText:(NSString *)detailText hideAfterDelay:(NSTimeInterval)delay {
  78 + self.contentCustomView = [[UIImageView alloc] initWithImage:[[QMUIHelper imageWithName:@"QMUI_tips_done"] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]];
  79 + [self showTipWithText:text detailText:detailText hideAfterDelay:delay];
  80 +}
  81 +
  82 +- (void)showError:(NSString *)text {
  83 + [self showError:text detailText:nil hideAfterDelay:0];
  84 +}
  85 +
  86 +- (void)showError:(NSString *)text hideAfterDelay:(NSTimeInterval)delay {
  87 + [self showError:text detailText:nil hideAfterDelay:delay];
  88 +}
  89 +
  90 +- (void)showError:(NSString *)text detailText:(NSString *)detailText {
  91 + [self showError:text detailText:detailText hideAfterDelay:0];
  92 +}
  93 +
  94 +- (void)showError:(NSString *)text detailText:(NSString *)detailText hideAfterDelay:(NSTimeInterval)delay {
  95 + self.contentCustomView = [[UIImageView alloc] initWithImage:[[QMUIHelper imageWithName:@"QMUI_tips_error"] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]];
  96 + [self showTipWithText:text detailText:detailText hideAfterDelay:delay];
  97 +}
  98 +
  99 +- (void)showInfo:(NSString *)text {
  100 + [self showInfo:text detailText:nil hideAfterDelay:0];
  101 +}
  102 +
  103 +- (void)showInfo:(NSString *)text hideAfterDelay:(NSTimeInterval)delay {
  104 + [self showInfo:text detailText:nil hideAfterDelay:delay];
  105 +}
  106 +
  107 +- (void)showInfo:(NSString *)text detailText:(NSString *)detailText {
  108 + [self showInfo:text detailText:detailText hideAfterDelay:0];
  109 +}
  110 +
  111 +- (void)showInfo:(NSString *)text detailText:(NSString *)detailText hideAfterDelay:(NSTimeInterval)delay {
  112 + self.contentCustomView = [[UIImageView alloc] initWithImage:[[QMUIHelper imageWithName:@"QMUI_tips_info"] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]];
  113 + [self showTipWithText:text detailText:detailText hideAfterDelay:delay];
  114 +}
  115 +
  116 +- (void)showTipWithText:(NSString *)text detailText:(NSString *)detailText hideAfterDelay:(NSTimeInterval)delay {
  117 +
  118 + QMUIToastContentView *contentView = (QMUIToastContentView *)self.contentView;
  119 + contentView.customView = self.contentCustomView;
  120 +
  121 + contentView.textLabelText = text ?: @"";
  122 + contentView.detailTextLabelText = detailText ?: @"";
  123 +
  124 + [self showAnimated:YES];
  125 +
  126 + if (delay == QMUITipsAutomaticallyHideToastSeconds) {
  127 + [self hideAnimated:YES afterDelay:[CNLiveShowTips smartDelaySecondsForTipsText:text]];
  128 + } else if (delay > 0) {
  129 + [self hideAnimated:YES afterDelay:delay];
  130 + }
  131 +}
  132 +
  133 ++ (NSTimeInterval)smartDelaySecondsForTipsText:(NSString *)text {
  134 + NSUInteger length = text.qmui_lengthWhenCountingNonASCIICharacterAsTwo;
  135 + if (length <= 20) {
  136 + return 1.5;
  137 + } else if (length <= 40) {
  138 + return 2.0;
  139 + } else if (length <= 50) {
  140 + return 2.5;
  141 + } else {
  142 + return 3.0;
  143 + }
  144 +}
  145 +
  146 ++ (CNLiveShowTips *)showLoadingInView:(UIView *)view {
  147 + return [self showLoading:nil detailText:nil inView:view hideAfterDelay:0];
  148 +}
  149 +
  150 ++ (CNLiveShowTips *)showLoading:(NSString *)text inView:(UIView *)view {
  151 + return [self showLoading:text detailText:nil inView:view hideAfterDelay:0];
  152 +}
  153 +
  154 ++ (CNLiveShowTips *)showLoadingInView:(UIView *)view hideAfterDelay:(NSTimeInterval)delay {
  155 + return [self showLoading:nil detailText:nil inView:view hideAfterDelay:delay];
  156 +}
  157 +
  158 ++ (CNLiveShowTips *)showLoading:(NSString *)text inView:(UIView *)view hideAfterDelay:(NSTimeInterval)delay {
  159 + return [self showLoading:text detailText:nil inView:view hideAfterDelay:delay];
  160 +}
  161 +
  162 ++ (CNLiveShowTips *)showLoading:(NSString *)text detailText:(NSString *)detailText inView:(UIView *)view {
  163 + return [self showLoading:text detailText:detailText inView:view hideAfterDelay:0];
  164 +}
  165 +
  166 ++ (CNLiveShowTips *)showLoading:(NSString *)text detailText:(NSString *)detailText inView:(UIView *)view hideAfterDelay:(NSTimeInterval)delay {
  167 + CNLiveShowTips *tips = [self createTipsToView:view];
  168 + [tips showLoading:text detailText:detailText hideAfterDelay:delay];
  169 + return tips;
  170 +}
  171 +
  172 ++ (CNLiveShowTips *)showWithText:(nullable NSString *)text {
  173 + return [self showWithText:text detailText:nil inView:DefaultTipsParentView hideAfterDelay:QMUITipsAutomaticallyHideToastSeconds];
  174 +}
  175 +
  176 ++ (CNLiveShowTips *)showWithText:(nullable NSString *)text detailText:(nullable NSString *)detailText {
  177 + return [self showWithText:text detailText:detailText inView:DefaultTipsParentView hideAfterDelay:QMUITipsAutomaticallyHideToastSeconds];
  178 +}
  179 +
  180 ++ (CNLiveShowTips *)showWithText:(NSString *)text inView:(UIView *)view {
  181 + return [self showWithText:text detailText:nil inView:view hideAfterDelay:0];
  182 +}
  183 +
  184 ++ (CNLiveShowTips *)showWithText:(NSString *)text inView:(UIView *)view hideAfterDelay:(NSTimeInterval)delay {
  185 + return [self showWithText:text detailText:nil inView:view hideAfterDelay:delay];
  186 +}
  187 +
  188 ++ (CNLiveShowTips *)showWithText:(NSString *)text detailText:(NSString *)detailText inView:(UIView *)view {
  189 + return [self showWithText:text detailText:detailText inView:view hideAfterDelay:0];
  190 +}
  191 +
  192 ++ (CNLiveShowTips *)showWithText:(NSString *)text detailText:(NSString *)detailText inView:(UIView *)view hideAfterDelay:(NSTimeInterval)delay {
  193 + CNLiveShowTips *tips = [self createTipsToView:view];
  194 + [tips showWithText:text detailText:detailText hideAfterDelay:delay];
  195 + return tips;
  196 +}
  197 +
  198 ++ (CNLiveShowTips *)showSucceed:(nullable NSString *)text {
  199 + return [self showSucceed:text detailText:nil inView:DefaultTipsParentView hideAfterDelay:QMUITipsAutomaticallyHideToastSeconds];
  200 +}
  201 +
  202 ++ (CNLiveShowTips *)showSucceed:(nullable NSString *)text detailText:(nullable NSString *)detailText {
  203 + return [self showSucceed:text detailText:detailText inView:DefaultTipsParentView hideAfterDelay:QMUITipsAutomaticallyHideToastSeconds];
  204 +}
  205 +
  206 ++ (CNLiveShowTips *)showSucceed:(NSString *)text inView:(UIView *)view {
  207 + return [self showSucceed:text detailText:nil inView:view hideAfterDelay:0];
  208 +}
  209 +
  210 ++ (CNLiveShowTips *)showSucceed:(NSString *)text inView:(UIView *)view hideAfterDelay:(NSTimeInterval)delay {
  211 + return [self showSucceed:text detailText:nil inView:view hideAfterDelay:delay];
  212 +}
  213 +
  214 ++ (CNLiveShowTips *)showSucceed:(NSString *)text detailText:(NSString *)detailText inView:(UIView *)view {
  215 + return [self showSucceed:text detailText:detailText inView:view hideAfterDelay:0];
  216 +}
  217 +
  218 ++ (CNLiveShowTips *)showSucceed:(NSString *)text detailText:(NSString *)detailText inView:(UIView *)view hideAfterDelay:(NSTimeInterval)delay {
  219 + CNLiveShowTips *tips = [self createTipsToView:view];
  220 + [tips showSucceed:text detailText:detailText hideAfterDelay:delay];
  221 + return tips;
  222 +}
  223 +
  224 ++ (CNLiveShowTips *)showError:(nullable NSString *)text {
  225 + return [self showError:text detailText:nil inView:DefaultTipsParentView hideAfterDelay:QMUITipsAutomaticallyHideToastSeconds];
  226 +}
  227 +
  228 ++ (CNLiveShowTips *)showError:(nullable NSString *)text detailText:(nullable NSString *)detailText {
  229 + return [self showError:text detailText:detailText inView:DefaultTipsParentView hideAfterDelay:QMUITipsAutomaticallyHideToastSeconds];
  230 +}
  231 +
  232 ++ (CNLiveShowTips *)showError:(NSString *)text inView:(UIView *)view {
  233 + return [self showError:text detailText:nil inView:view hideAfterDelay:0];
  234 +}
  235 +
  236 ++ (CNLiveShowTips *)showError:(NSString *)text inView:(UIView *)view hideAfterDelay:(NSTimeInterval)delay {
  237 + return [self showError:text detailText:nil inView:view hideAfterDelay:delay];
  238 +}
  239 +
  240 ++ (CNLiveShowTips *)showError:(NSString *)text detailText:(NSString *)detailText inView:(UIView *)view {
  241 + return [self showError:text detailText:detailText inView:view hideAfterDelay:0];
  242 +}
  243 +
  244 ++ (CNLiveShowTips *)showError:(NSString *)text detailText:(NSString *)detailText inView:(UIView *)view hideAfterDelay:(NSTimeInterval)delay {
  245 + CNLiveShowTips *tips = [self createTipsToView:view];
  246 + [tips showError:text detailText:detailText hideAfterDelay:delay];
  247 + return tips;
  248 +}
  249 +
  250 ++ (CNLiveShowTips *)showInfo:(nullable NSString *)text {
  251 + return [self showInfo:text detailText:nil inView:DefaultTipsParentView hideAfterDelay:QMUITipsAutomaticallyHideToastSeconds];
  252 +}
  253 +
  254 ++ (CNLiveShowTips *)showInfo:(nullable NSString *)text detailText:(nullable NSString *)detailText {
  255 + return [self showInfo:text detailText:detailText inView:DefaultTipsParentView hideAfterDelay:QMUITipsAutomaticallyHideToastSeconds];
  256 +}
  257 +
  258 ++ (CNLiveShowTips *)showInfo:(NSString *)text inView:(UIView *)view {
  259 + return [self showInfo:text detailText:nil inView:view hideAfterDelay:0];
  260 +}
  261 +
  262 ++ (CNLiveShowTips *)showInfo:(NSString *)text inView:(UIView *)view hideAfterDelay:(NSTimeInterval)delay {
  263 + return [self showInfo:text detailText:nil inView:view hideAfterDelay:delay];
  264 +}
  265 +
  266 ++ (CNLiveShowTips *)showInfo:(NSString *)text detailText:(NSString *)detailText inView:(UIView *)view {
  267 + return [self showInfo:text detailText:detailText inView:view hideAfterDelay:0];
  268 +}
  269 +
  270 ++ (CNLiveShowTips *)showInfo:(NSString *)text detailText:(NSString *)detailText inView:(UIView *)view hideAfterDelay:(NSTimeInterval)delay {
  271 + CNLiveShowTips *tips = [self createTipsToView:view];
  272 + [tips showInfo:text detailText:detailText hideAfterDelay:delay];
  273 + return tips;
  274 +}
  275 +
  276 ++ (CNLiveShowTips *)createTipsToView:(UIView *)view {
  277 + CNLiveShowTips *tips = [[CNLiveShowTips alloc] initWithView:view];
  278 + [view addSubview:tips];
  279 + tips.removeFromSuperViewWhenHide = YES;
  280 + return tips;
  281 +}
  282 +
  283 ++ (void)hideAllTipsInView:(UIView *)view {
  284 + [self hideAllToastInView:view animated:NO];
  285 +}
  286 +
  287 ++ (void)hideAllTips {
  288 + [self hideAllToastInView:nil animated:NO];
  289 +}
  290 +
  291 +@end
... ...
CNLiveTips/Classes/CNLiveTips.h
1 1 //
2 2 // CNLiveTips.h
3   -// CNLiveNetAdd
  3 +// CNLiveTips
4 4 //
5   -// Created by 殷巧娟 on 2018/12/25.
6   -// Copyright © 2018年 cnlive. All rights reserved.
  5 +// Created by 殷巧娟 on 2019/1/18.
7 6 //
8 7  
9   -#import "CNLiveToastView.h"
  8 +#import <Foundation/Foundation.h>
10 9  
11 10 NS_ASSUME_NONNULL_BEGIN
12   -// 自动计算秒数的标志符,在 delay 里面赋值 QMUITipsAutomaticallyHideToastSeconds 即可通过自动计算 tips 消失的秒数
13   -extern const NSInteger QMUITipsAutomaticallyHideToastSeconds;
14 11  
15   -/// 默认的 parentView
16   -#define DefaultTipsParentView [[[UIApplication sharedApplication] delegate] window]
17   -
18   -/**
19   - * 简单封装了 QMUIToastView,支持弹出纯文本、loading、succeed、error、info 等五种 tips。如果这些接口还满足不了业务的需求,可以通过 QMUITips 的分类自行添加接口。
20   - * 注意用类方法显示 tips 的话,会导致父类的 willShowBlock 无法正常工作,具体请查看 willShowBlock 的注释。
21   - * @see [QMUIToastView willShowBlock]
22   - */
23   -@interface CNLiveTips : CNLiveToastView
24   -/// 实例方法:需要自己addSubview,hide之后不会自动removeFromSuperView
25   -
26   -- (void)showLoading;
27   -- (void)showLoading:(nullable NSString *)text;
28   -- (void)showLoadingHideAfterDelay:(NSTimeInterval)delay;
29   -- (void)showLoading:(nullable NSString *)text hideAfterDelay:(NSTimeInterval)delay;
30   -- (void)showLoading:(nullable NSString *)text detailText:(nullable NSString *)detailText;
31   -- (void)showLoading:(nullable NSString *)text detailText:(nullable NSString *)detailText hideAfterDelay:(NSTimeInterval)delay;
32   -
33   -- (void)showWithText:(nullable NSString *)text;
34   -- (void)showWithText:(nullable NSString *)text hideAfterDelay:(NSTimeInterval)delay;
35   -- (void)showWithText:(nullable NSString *)text detailText:(nullable NSString *)detailText;
36   -- (void)showWithText:(nullable NSString *)text detailText:(nullable NSString *)detailText hideAfterDelay:(NSTimeInterval)delay;
37   -
38   -- (void)showSucceed:(nullable NSString *)text;
39   -- (void)showSucceed:(nullable NSString *)text hideAfterDelay:(NSTimeInterval)delay;
40   -- (void)showSucceed:(nullable NSString *)text detailText:(nullable NSString *)detailText;
41   -- (void)showSucceed:(nullable NSString *)text detailText:(nullable NSString *)detailText hideAfterDelay:(NSTimeInterval)delay;
42   -
43   -- (void)showError:(nullable NSString *)text;
44   -- (void)showError:(nullable NSString *)text hideAfterDelay:(NSTimeInterval)delay;
45   -- (void)showError:(nullable NSString *)text detailText:(nullable NSString *)detailText;
46   -- (void)showError:(nullable NSString *)text detailText:(nullable NSString *)detailText hideAfterDelay:(NSTimeInterval)delay;
47   -
48   -- (void)showInfo:(nullable NSString *)text;
49   -- (void)showInfo:(nullable NSString *)text hideAfterDelay:(NSTimeInterval)delay;
50   -- (void)showInfo:(nullable NSString *)text detailText:(nullable NSString *)detailText;
51   -- (void)showInfo:(nullable NSString *)text detailText:(nullable NSString *)detailText hideAfterDelay:(NSTimeInterval)delay;
52   -
53   -/// 类方法:主要用在局部一次性使用的场景,hide之后会自动removeFromSuperView
54   -
55   -+ (CNLiveTips *)createTipsToView:(UIView *)view;
56   -
57   -+ (CNLiveTips *)showLoadingInView:(UIView *)view;
58   -+ (CNLiveTips *)showLoading:(nullable NSString *)text inView:(UIView *)view;
59   -+ (CNLiveTips *)showLoadingInView:(UIView *)view hideAfterDelay:(NSTimeInterval)delay;
60   -+ (CNLiveTips *)showLoading:(nullable NSString *)text inView:(UIView *)view hideAfterDelay:(NSTimeInterval)delay;
61   -+ (CNLiveTips *)showLoading:(nullable NSString *)text detailText:(nullable NSString *)detailText inView:(UIView *)view;
62   -+ (CNLiveTips *)showLoading:(nullable NSString *)text detailText:(nullable NSString *)detailText inView:(UIView *)view hideAfterDelay:(NSTimeInterval)delay;
63   -
64   -+ (CNLiveTips *)showWithText:(nullable NSString *)text;
65   -+ (CNLiveTips *)showWithText:(nullable NSString *)text detailText:(nullable NSString *)detailText;
66   -+ (CNLiveTips *)showWithText:(nullable NSString *)text inView:(UIView *)view;
67   -+ (CNLiveTips *)showWithText:(nullable NSString *)text inView:(UIView *)view hideAfterDelay:(NSTimeInterval)delay;
68   -+ (CNLiveTips *)showWithText:(nullable NSString *)text detailText:(nullable NSString *)detailText inView:(UIView *)view;
69   -+ (CNLiveTips *)showWithText:(nullable NSString *)text detailText:(nullable NSString *)detailText inView:(UIView *)view hideAfterDelay:(NSTimeInterval)delay;
70   -
71   -+ (CNLiveTips *)showSucceed:(nullable NSString *)text;
72   -+ (CNLiveTips *)showSucceed:(nullable NSString *)text detailText:(nullable NSString *)detailText;
73   -+ (CNLiveTips *)showSucceed:(nullable NSString *)text inView:(UIView *)view;
74   -+ (CNLiveTips *)showSucceed:(nullable NSString *)text inView:(UIView *)view hideAfterDelay:(NSTimeInterval)delay;
75   -+ (CNLiveTips *)showSucceed:(nullable NSString *)text detailText:(nullable NSString *)detailText inView:(UIView *)view;
76   -+ (CNLiveTips *)showSucceed:(nullable NSString *)text detailText:(nullable NSString *)detailText inView:(UIView *)view hideAfterDelay:(NSTimeInterval)delay;
77   -
78   -+ (CNLiveTips *)showError:(nullable NSString *)text;
79   -+ (CNLiveTips *)showError:(nullable NSString *)text detailText:(nullable NSString *)detailText;
80   -+ (CNLiveTips *)showError:(nullable NSString *)text inView:(UIView *)view;
81   -+ (CNLiveTips *)showError:(nullable NSString *)text inView:(UIView *)view hideAfterDelay:(NSTimeInterval)delay;
82   -+ (CNLiveTips *)showError:(nullable NSString *)text detailText:(nullable NSString *)detailText inView:(UIView *)view;
83   -+ (CNLiveTips *)showError:(nullable NSString *)text detailText:(nullable NSString *)detailText inView:(UIView *)view hideAfterDelay:(NSTimeInterval)delay;
84   -
85   -+ (CNLiveTips *)showInfo:(nullable NSString *)text;
86   -+ (CNLiveTips *)showInfo:(nullable NSString *)text detailText:(nullable NSString *)detailText;
87   -+ (CNLiveTips *)showInfo:(nullable NSString *)text inView:(UIView *)view;
88   -+ (CNLiveTips *)showInfo:(nullable NSString *)text inView:(UIView *)view hideAfterDelay:(NSTimeInterval)delay;
89   -+ (CNLiveTips *)showInfo:(nullable NSString *)text detailText:(nullable NSString *)detailText inView:(UIView *)view;
90   -+ (CNLiveTips *)showInfo:(nullable NSString *)text detailText:(nullable NSString *)detailText inView:(UIView *)view hideAfterDelay:(NSTimeInterval)delay;
91   -
92   -/// 隐藏 tips
  12 +@interface CNLiveTips : NSObject
  13 ++ (void)showLoadingInView:(UIView *)view;
  14 ++ (void)showLoading:(NSString *)text inView:(UIView *)view;
  15 ++ (void)showLoadingInView:(UIView *)view hideAfterDelay:(NSTimeInterval)delay;
  16 ++ (void)showLoading:(NSString *)text inView:(UIView *)view hideAfterDelay:(NSTimeInterval)delay;
  17 ++ (void)showLoading:(NSString *)text detailText:(NSString *)detailText inView:(UIView *)view;
  18 ++ (void)showLoading:(NSString *)text detailText:(NSString *)detailText inView:(UIView *)view hideAfterDelay:(NSTimeInterval)delay;
  19 ++ (void)showWithText:(nullable NSString *)text;
  20 ++ (void)showWithText:(nullable NSString *)text detailText:(nullable NSString *)detailText;
  21 ++ (void)showWithText:(NSString *)text inView:(UIView *)view;
  22 ++ (void)showWithText:(NSString *)text inView:(UIView *)view hideAfterDelay:(NSTimeInterval)delay;
  23 ++ (void)showWithText:(NSString *)text detailText:(NSString *)detailText inView:(UIView *)view;
  24 ++ (void)showWithText:(NSString *)text detailText:(NSString *)detailText inView:(UIView *)view hideAfterDelay:(NSTimeInterval)delay;
  25 ++ (void)showSucceed:(nullable NSString *)text;
  26 ++ (void)showSucceed:(nullable NSString *)text detailText:(nullable NSString *)detailText;
  27 ++ (void)showSucceed:(NSString *)text inView:(UIView *)view;
  28 ++ (void)showSucceed:(NSString *)text inView:(UIView *)view hideAfterDelay:(NSTimeInterval)delay;
  29 ++ (void)showSucceed:(NSString *)text detailText:(NSString *)detailText inView:(UIView *)view;
  30 ++ (void)showSucceed:(NSString *)text detailText:(NSString *)detailText inView:(UIView *)view hideAfterDelay:(NSTimeInterval)delay;
  31 ++ (void)showError:(nullable NSString *)text;
  32 ++ (void)showError:(nullable NSString *)text detailText:(nullable NSString *)detailText;
  33 ++ (void)showError:(NSString *)text inView:(UIView *)view;
  34 ++ (void)showError:(NSString *)text inView:(UIView *)view hideAfterDelay:(NSTimeInterval)delay;
  35 ++ (void)showError:(NSString *)text detailText:(NSString *)detailText inView:(UIView *)view;
  36 ++ (void)showError:(NSString *)text detailText:(NSString *)detailText inView:(UIView *)view hideAfterDelay:(NSTimeInterval)delay;
  37 ++ (void)showInfo:(nullable NSString *)text;
  38 ++ (void)showInfo:(nullable NSString *)text detailText:(nullable NSString *)detailText;
  39 ++ (void)showInfo:(NSString *)text inView:(UIView *)view;
  40 ++ (void)showInfo:(NSString *)text inView:(UIView *)view hideAfterDelay:(NSTimeInterval)delay;
  41 ++ (void)showInfo:(NSString *)text detailText:(NSString *)detailText inView:(UIView *)view;
  42 ++ (void)showInfo:(NSString *)text detailText:(NSString *)detailText inView:(UIView *)view hideAfterDelay:(NSTimeInterval)delay;
  43 ++ (void)createTipsToView:(UIView *)view;
93 44 + (void)hideAllTipsInView:(UIView *)view;
94 45 + (void)hideAllTips;
95   -
96   -/// 自动隐藏 toast 可以使用这个方法自动计算秒数
97   -+ (NSTimeInterval)smartDelaySecondsForTipsText:(NSString *)text;
98 46 @end
99 47  
100 48 NS_ASSUME_NONNULL_END
... ...
CNLiveTips/Classes/CNLiveTips.m
1 1 //
2 2 // CNLiveTips.m
3   -// CNLiveNetAdd
  3 +// CNLiveTips
4 4 //
5   -// Created by 殷巧娟 on 2018/12/25.
6   -// Copyright © 2018年 cnlive. All rights reserved.
  5 +// Created by 殷巧娟 on 2019/1/18.
7 6 //
8 7  
9 8 #import "CNLiveTips.h"
10   -#import <QMUIKit/QMUIKit.h>
11   -#import "QMUICore.h"
12   -#import "QMUIToastContentView.h"
13   -#import "QMUIToastBackgroundView.h"
14   -#import "NSString+QMUI.h"
15   -const NSInteger QMUITipsAutomaticallyHideToastSeconds = -1;
16   -
17   -@interface CNLiveTips ()
18   -@property(nonatomic, strong) UIView *contentCustomView;
19   -@end
20 9  
  10 +#import<QMUIKit/QMUITips.h>
21 11 @implementation CNLiveTips
22   -- (void)showLoading {
23   - [self showLoading:nil hideAfterDelay:0];
24   -}
25 12  
26   -- (void)showLoadingHideAfterDelay:(NSTimeInterval)delay {
27   - [self showLoading:nil hideAfterDelay:delay];
  13 ++ (void)showLoadingInView:(UIView *)view{
  14 + [QMUITips showLoadingInView:view];
28 15 }
29   -
30   -- (void)showLoading:(NSString *)text {
31   - [self showLoading:text hideAfterDelay:0];
  16 ++ (void)showLoading:(NSString *)text inView:(UIView *)view {
  17 + [QMUITips showLoading:text inView:view];
32 18 }
33   -
34   -- (void)showLoading:(NSString *)text hideAfterDelay:(NSTimeInterval)delay {
35   - [self showLoading:text detailText:nil hideAfterDelay:delay];
  19 ++ (void)showLoadingInView:(UIView *)view hideAfterDelay:(NSTimeInterval)delay {
  20 + [QMUITips showLoadingInView:view hideAfterDelay:delay];
36 21 }
37   -
38   -- (void)showLoading:(NSString *)text detailText:(NSString *)detailText {
39   - [self showLoading:text detailText:detailText hideAfterDelay:0];
  22 ++ (void)showLoading:(NSString *)text inView:(UIView *)view hideAfterDelay:(NSTimeInterval)delay {
  23 + [QMUITips showLoading:text inView:view hideAfterDelay:delay];
40 24 }
41   -- (void)showLoading:(NSString *)text detailText:(NSString *)detailText hideAfterDelay:(NSTimeInterval)delay {
42   - UIActivityIndicatorView *indicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
43   - [indicator startAnimating];
44   - self.contentCustomView = indicator;
45   - [self showTipWithText:text detailText:detailText hideAfterDelay:delay];
  25 ++ (void)showLoading:(NSString *)text detailText:(NSString *)detailText inView:(UIView *)view {
  26 + [QMUITips showLoading:text detailText:detailText inView:view];
46 27 }
47   -
48   -- (void)showWithText:(NSString *)text {
49   - [self showWithText:text detailText:nil hideAfterDelay:0];
  28 ++ (void)showLoading:(NSString *)text detailText:(NSString *)detailText inView:(UIView *)view hideAfterDelay:(NSTimeInterval)delay {
  29 + [QMUITips showLoading:text detailText:detailText inView:view hideAfterDelay:delay];
50 30 }
51   -
52   -- (void)showWithText:(NSString *)text hideAfterDelay:(NSTimeInterval)delay {
53   - [self showWithText:text detailText:nil hideAfterDelay:delay];
  31 ++ (void)showWithText:(nullable NSString *)text {
  32 + [QMUITips showWithText:text];
54 33 }
55   -
56   -- (void)showWithText:(NSString *)text detailText:(NSString *)detailText {
57   - [self showWithText:text detailText:detailText hideAfterDelay:0];
  34 ++ (void)showWithText:(nullable NSString *)text detailText:(nullable NSString *)detailText {
  35 + [QMUITips showWithText:text detailText:detailText];
58 36 }
59   -
60   -- (void)showWithText:(NSString *)text detailText:(NSString *)detailText hideAfterDelay:(NSTimeInterval)delay {
61   - self.contentCustomView = nil;
62   - [self showTipWithText:text detailText:detailText hideAfterDelay:delay];
  37 ++ (void)showWithText:(NSString *)text inView:(UIView *)view {
  38 + [QMUITips showWithText:text inView:view];
63 39 }
64   -
65   -- (void)showSucceed:(NSString *)text {
66   - [self showSucceed:text detailText:nil hideAfterDelay:0];
  40 ++ (void)showWithText:(NSString *)text inView:(UIView *)view hideAfterDelay:(NSTimeInterval)delay {
  41 + [QMUITips showWithText:text inView:view hideAfterDelay:delay];
67 42 }
68   -
69   -- (void)showSucceed:(NSString *)text hideAfterDelay:(NSTimeInterval)delay {
70   - [self showSucceed:text detailText:nil hideAfterDelay:delay];
  43 ++ (void)showWithText:(NSString *)text detailText:(NSString *)detailText inView:(UIView *)view {
  44 + [QMUITips showWithText:text detailText:detailText inView:view];
71 45 }
72   -
73   -- (void)showSucceed:(NSString *)text detailText:(NSString *)detailText {
74   - [self showSucceed:text detailText:detailText hideAfterDelay:0];
  46 ++ (void)showWithText:(NSString *)text detailText:(NSString *)detailText inView:(UIView *)view hideAfterDelay:(NSTimeInterval)delay {
  47 + [QMUITips showWithText:text detailText:detailText inView:view hideAfterDelay:delay];
75 48 }
76   -
77   -- (void)showSucceed:(NSString *)text detailText:(NSString *)detailText hideAfterDelay:(NSTimeInterval)delay {
78   - self.contentCustomView = [[UIImageView alloc] initWithImage:[[QMUIHelper imageWithName:@"QMUI_tips_done"] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]];
79   - [self showTipWithText:text detailText:detailText hideAfterDelay:delay];
  49 ++ (void)showSucceed:(nullable NSString *)text {
  50 + [QMUITips showSucceed:text];
80 51 }
81   -
82   -- (void)showError:(NSString *)text {
83   - [self showError:text detailText:nil hideAfterDelay:0];
  52 ++ (void)showSucceed:(nullable NSString *)text detailText:(nullable NSString *)detailText {
  53 + [QMUITips showSucceed:text detailText:detailText];
84 54 }
85   -
86   -- (void)showError:(NSString *)text hideAfterDelay:(NSTimeInterval)delay {
87   - [self showError:text detailText:nil hideAfterDelay:delay];
  55 ++ (void)showSucceed:(NSString *)text inView:(UIView *)view {
  56 + [QMUITips showSucceed:text inView:view];
88 57 }
89   -
90   -- (void)showError:(NSString *)text detailText:(NSString *)detailText {
91   - [self showError:text detailText:detailText hideAfterDelay:0];
  58 ++ (void)showSucceed:(NSString *)text inView:(UIView *)view hideAfterDelay:(NSTimeInterval)delay {
  59 + [QMUITips showSucceed:text inView:view hideAfterDelay:delay];
92 60 }
93   -
94   -- (void)showError:(NSString *)text detailText:(NSString *)detailText hideAfterDelay:(NSTimeInterval)delay {
95   - self.contentCustomView = [[UIImageView alloc] initWithImage:[[QMUIHelper imageWithName:@"QMUI_tips_error"] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]];
96   - [self showTipWithText:text detailText:detailText hideAfterDelay:delay];
  61 ++ (void)showSucceed:(NSString *)text detailText:(NSString *)detailText inView:(UIView *)view {
  62 + [QMUITips showSucceed:text detailText:detailText inView:view];
97 63 }
98   -
99   -- (void)showInfo:(NSString *)text {
100   - [self showInfo:text detailText:nil hideAfterDelay:0];
  64 ++ (void)showSucceed:(NSString *)text detailText:(NSString *)detailText inView:(UIView *)view hideAfterDelay:(NSTimeInterval)delay {
  65 + [QMUITips showSucceed:text detailText:detailText inView:view hideAfterDelay:delay];
101 66 }
102   -
103   -- (void)showInfo:(NSString *)text hideAfterDelay:(NSTimeInterval)delay {
104   - [self showInfo:text detailText:nil hideAfterDelay:delay];
  67 ++ (void)showError:(nullable NSString *)text {
  68 + [QMUITips showError:text];
105 69 }
106   -
107   -- (void)showInfo:(NSString *)text detailText:(NSString *)detailText {
108   - [self showInfo:text detailText:detailText hideAfterDelay:0];
  70 ++ (void)showError:(nullable NSString *)text detailText:(nullable NSString *)detailText{
  71 + [QMUITips showError:text detailText:detailText];
109 72 }
110   -
111   -- (void)showInfo:(NSString *)text detailText:(NSString *)detailText hideAfterDelay:(NSTimeInterval)delay {
112   - self.contentCustomView = [[UIImageView alloc] initWithImage:[[QMUIHelper imageWithName:@"QMUI_tips_info"] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]];
113   - [self showTipWithText:text detailText:detailText hideAfterDelay:delay];
114   -}
115   -
116   -- (void)showTipWithText:(NSString *)text detailText:(NSString *)detailText hideAfterDelay:(NSTimeInterval)delay {
117   -
118   - QMUIToastContentView *contentView = (QMUIToastContentView *)self.contentView;
119   - contentView.customView = self.contentCustomView;
120   -
121   - contentView.textLabelText = text ?: @"";
122   - contentView.detailTextLabelText = detailText ?: @"";
123   -
124   - [self showAnimated:YES];
125   -
126   - if (delay == QMUITipsAutomaticallyHideToastSeconds) {
127   - [self hideAnimated:YES afterDelay:[CNLiveTips smartDelaySecondsForTipsText:text]];
128   - } else if (delay > 0) {
129   - [self hideAnimated:YES afterDelay:delay];
130   - }
131   -}
132   -
133   -+ (NSTimeInterval)smartDelaySecondsForTipsText:(NSString *)text {
134   - NSUInteger length = text.qmui_lengthWhenCountingNonASCIICharacterAsTwo;
135   - if (length <= 20) {
136   - return 1.5;
137   - } else if (length <= 40) {
138   - return 2.0;
139   - } else if (length <= 50) {
140   - return 2.5;
141   - } else {
142   - return 3.0;
143   - }
  73 ++(void)showError:(NSString *)text inView:(UIView *)view {
  74 + [QMUITips showError:text inView:view];
144 75 }
145   -
146   -+ (CNLiveTips *)showLoadingInView:(UIView *)view {
147   - return [self showLoading:nil detailText:nil inView:view hideAfterDelay:0];
148   -}
149   -
150   -+ (CNLiveTips *)showLoading:(NSString *)text inView:(UIView *)view {
151   - return [self showLoading:text detailText:nil inView:view hideAfterDelay:0];
152   -}
153   -
154   -+ (CNLiveTips *)showLoadingInView:(UIView *)view hideAfterDelay:(NSTimeInterval)delay {
155   - return [self showLoading:nil detailText:nil inView:view hideAfterDelay:delay];
  76 ++(void)showError:(NSString *)text inView:(UIView *)view hideAfterDelay:(NSTimeInterval)delay{
  77 + [QMUITips showError:text inView:view hideAfterDelay:delay];
156 78 }
157   -
158   -+ (CNLiveTips *)showLoading:(NSString *)text inView:(UIView *)view hideAfterDelay:(NSTimeInterval)delay {
159   - return [self showLoading:text detailText:nil inView:view hideAfterDelay:delay];
  79 ++ (void)showError:(NSString *)text detailText:(NSString *)detailText inView:(UIView *)view {
  80 + [QMUITips showError:text detailText:detailText inView:view];
160 81 }
161   -
162   -+ (CNLiveTips *)showLoading:(NSString *)text detailText:(NSString *)detailText inView:(UIView *)view {
163   - return [self showLoading:text detailText:detailText inView:view hideAfterDelay:0];
  82 ++ (void)showError:(NSString *)text detailText:(NSString *)detailText inView:(UIView *)view hideAfterDelay:(NSTimeInterval)delay {
  83 + [QMUITips showError:text detailText:detailText inView:view hideAfterDelay:delay];
164 84 }
165   -
166   -+ (CNLiveTips *)showLoading:(NSString *)text detailText:(NSString *)detailText inView:(UIView *)view hideAfterDelay:(NSTimeInterval)delay {
167   - CNLiveTips *tips = [self createTipsToView:view];
168   - [tips showLoading:text detailText:detailText hideAfterDelay:delay];
169   - return tips;
  85 ++ (void)showInfo:(nullable NSString *)text {
  86 + [QMUITips showInfo:text];
170 87 }
171   -
172   -+ (CNLiveTips *)showWithText:(nullable NSString *)text {
173   - return [self showWithText:text detailText:nil inView:DefaultTipsParentView hideAfterDelay:QMUITipsAutomaticallyHideToastSeconds];
  88 ++ (void)showInfo:(nullable NSString *)text detailText:(nullable NSString *)detailText {
  89 + [QMUITips showInfo:text detailText:detailText];
174 90 }
175   -
176   -+ (CNLiveTips *)showWithText:(nullable NSString *)text detailText:(nullable NSString *)detailText {
177   - return [self showWithText:text detailText:detailText inView:DefaultTipsParentView hideAfterDelay:QMUITipsAutomaticallyHideToastSeconds];
  91 ++ (void)showInfo:(NSString *)text inView:(UIView *)view {
  92 + [QMUITips showInfo:text inView:view];
178 93 }
179   -
180   -+ (CNLiveTips *)showWithText:(NSString *)text inView:(UIView *)view {
181   - return [self showWithText:text detailText:nil inView:view hideAfterDelay:0];
  94 ++ (void)showInfo:(NSString *)text inView:(UIView *)view hideAfterDelay:(NSTimeInterval)delay {
  95 + [QMUITips showInfo:text inView:view hideAfterDelay:delay];
182 96 }
183   -
184   -+ (CNLiveTips *)showWithText:(NSString *)text inView:(UIView *)view hideAfterDelay:(NSTimeInterval)delay {
185   - return [self showWithText:text detailText:nil inView:view hideAfterDelay:delay];
  97 ++ (void)showInfo:(NSString *)text detailText:(NSString *)detailText inView:(UIView *)view {
  98 + [QMUITips showInfo:text detailText:detailText inView:view];
186 99 }
187   -
188   -+ (CNLiveTips *)showWithText:(NSString *)text detailText:(NSString *)detailText inView:(UIView *)view {
189   - return [self showWithText:text detailText:detailText inView:view hideAfterDelay:0];
  100 ++ (void)showInfo:(NSString *)text detailText:(NSString *)detailText inView:(UIView *)view hideAfterDelay:(NSTimeInterval)delay {
  101 + [QMUITips showInfo:text detailText:detailText inView:view hideAfterDelay:delay];
190 102 }
191   -
192   -+ (CNLiveTips *)showWithText:(NSString *)text detailText:(NSString *)detailText inView:(UIView *)view hideAfterDelay:(NSTimeInterval)delay {
193   - CNLiveTips *tips = [self createTipsToView:view];
194   - [tips showWithText:text detailText:detailText hideAfterDelay:delay];
195   - return tips;
  103 ++ (void)createTipsToView:(UIView *)view {
  104 + [QMUITips createTipsToView:view];
196 105 }
197   -
198   -+ (CNLiveTips *)showSucceed:(nullable NSString *)text {
199   - return [self showSucceed:text detailText:nil inView:DefaultTipsParentView hideAfterDelay:QMUITipsAutomaticallyHideToastSeconds];
200   -}
201   -
202   -+ (CNLiveTips *)showSucceed:(nullable NSString *)text detailText:(nullable NSString *)detailText {
203   - return [self showSucceed:text detailText:detailText inView:DefaultTipsParentView hideAfterDelay:QMUITipsAutomaticallyHideToastSeconds];
204   -}
205   -
206   -+ (CNLiveTips *)showSucceed:(NSString *)text inView:(UIView *)view {
207   - return [self showSucceed:text detailText:nil inView:view hideAfterDelay:0];
208   -}
209   -
210   -+ (CNLiveTips *)showSucceed:(NSString *)text inView:(UIView *)view hideAfterDelay:(NSTimeInterval)delay {
211   - return [self showSucceed:text detailText:nil inView:view hideAfterDelay:delay];
212   -}
213   -
214   -+ (CNLiveTips *)showSucceed:(NSString *)text detailText:(NSString *)detailText inView:(UIView *)view {
215   - return [self showSucceed:text detailText:detailText inView:view hideAfterDelay:0];
216   -}
217   -
218   -+ (CNLiveTips *)showSucceed:(NSString *)text detailText:(NSString *)detailText inView:(UIView *)view hideAfterDelay:(NSTimeInterval)delay {
219   - CNLiveTips *tips = [self createTipsToView:view];
220   - [tips showSucceed:text detailText:detailText hideAfterDelay:delay];
221   - return tips;
222   -}
223   -
224   -+ (CNLiveTips *)showError:(nullable NSString *)text {
225   - return [self showError:text detailText:nil inView:DefaultTipsParentView hideAfterDelay:QMUITipsAutomaticallyHideToastSeconds];
226   -}
227   -
228   -+ (CNLiveTips *)showError:(nullable NSString *)text detailText:(nullable NSString *)detailText {
229   - return [self showError:text detailText:detailText inView:DefaultTipsParentView hideAfterDelay:QMUITipsAutomaticallyHideToastSeconds];
230   -}
231   -
232   -+ (CNLiveTips *)showError:(NSString *)text inView:(UIView *)view {
233   - return [self showError:text detailText:nil inView:view hideAfterDelay:0];
234   -}
235   -
236   -+ (CNLiveTips *)showError:(NSString *)text inView:(UIView *)view hideAfterDelay:(NSTimeInterval)delay {
237   - return [self showError:text detailText:nil inView:view hideAfterDelay:delay];
238   -}
239   -
240   -+ (CNLiveTips *)showError:(NSString *)text detailText:(NSString *)detailText inView:(UIView *)view {
241   - return [self showError:text detailText:detailText inView:view hideAfterDelay:0];
242   -}
243   -
244   -+ (CNLiveTips *)showError:(NSString *)text detailText:(NSString *)detailText inView:(UIView *)view hideAfterDelay:(NSTimeInterval)delay {
245   - CNLiveTips *tips = [self createTipsToView:view];
246   - [tips showError:text detailText:detailText hideAfterDelay:delay];
247   - return tips;
248   -}
249   -
250   -+ (CNLiveTips *)showInfo:(nullable NSString *)text {
251   - return [self showInfo:text detailText:nil inView:DefaultTipsParentView hideAfterDelay:QMUITipsAutomaticallyHideToastSeconds];
252   -}
253   -
254   -+ (CNLiveTips *)showInfo:(nullable NSString *)text detailText:(nullable NSString *)detailText {
255   - return [self showInfo:text detailText:detailText inView:DefaultTipsParentView hideAfterDelay:QMUITipsAutomaticallyHideToastSeconds];
256   -}
257   -
258   -+ (CNLiveTips *)showInfo:(NSString *)text inView:(UIView *)view {
259   - return [self showInfo:text detailText:nil inView:view hideAfterDelay:0];
260   -}
261   -
262   -+ (CNLiveTips *)showInfo:(NSString *)text inView:(UIView *)view hideAfterDelay:(NSTimeInterval)delay {
263   - return [self showInfo:text detailText:nil inView:view hideAfterDelay:delay];
264   -}
265   -
266   -+ (CNLiveTips *)showInfo:(NSString *)text detailText:(NSString *)detailText inView:(UIView *)view {
267   - return [self showInfo:text detailText:detailText inView:view hideAfterDelay:0];
268   -}
269   -
270   -+ (CNLiveTips *)showInfo:(NSString *)text detailText:(NSString *)detailText inView:(UIView *)view hideAfterDelay:(NSTimeInterval)delay {
271   - CNLiveTips *tips = [self createTipsToView:view];
272   - [tips showInfo:text detailText:detailText hideAfterDelay:delay];
273   - return tips;
274   -}
275   -
276   -+ (CNLiveTips *)createTipsToView:(UIView *)view {
277   - CNLiveTips *tips = [[CNLiveTips alloc] initWithView:view];
278   - [view addSubview:tips];
279   - tips.removeFromSuperViewWhenHide = YES;
280   - return tips;
281   -}
282   -
283 106 + (void)hideAllTipsInView:(UIView *)view {
284   - [self hideAllToastInView:view animated:NO];
  107 + [QMUITips hideAllTipsInView:view];
285 108 }
286   -
287 109 + (void)hideAllTips {
288   - [self hideAllToastInView:nil animated:NO];
  110 + [QMUITips hideAllTips];
289 111 }
290   -
291 112 @end
... ...
Example/Pods/Pods.xcodeproj/project.pbxproj
... ... @@ -96,15 +96,17 @@
96 96 4D774FC7539145EA644DB80AA5495E91 /* QMUILinkButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 39CA4E6D9642C1EA36A3E91C9A6E0472 /* QMUILinkButton.m */; };
97 97 4E08FB8D21D364300042166B /* CNLiveToastView.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E08FB8021D364300042166B /* CNLiveToastView.h */; settings = {ATTRIBUTES = (Public, ); }; };
98 98 4E08FB8E21D364300042166B /* CNLiveToastContentView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4E08FB8121D364300042166B /* CNLiveToastContentView.m */; };
99   - 4E08FB8F21D364300042166B /* CNLiveTips.m in Sources */ = {isa = PBXBuildFile; fileRef = 4E08FB8221D364300042166B /* CNLiveTips.m */; };
  99 + 4E08FB8F21D364300042166B /* CNLiveShowTips.m in Sources */ = {isa = PBXBuildFile; fileRef = 4E08FB8221D364300042166B /* CNLiveShowTips.m */; };
100 100 4E08FB9021D364300042166B /* CNLiveToastBackgroundView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4E08FB8321D364300042166B /* CNLiveToastBackgroundView.m */; };
101 101 4E08FB9221D364300042166B /* CNLiveToastAnimator.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E08FB8521D364300042166B /* CNLiveToastAnimator.h */; settings = {ATTRIBUTES = (Public, ); }; };
102   - 4E08FB9321D364300042166B /* CNLiveTips.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E08FB8621D364300042166B /* CNLiveTips.h */; settings = {ATTRIBUTES = (Public, ); }; };
  102 + 4E08FB9321D364300042166B /* CNLiveShowTips.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E08FB8621D364300042166B /* CNLiveShowTips.h */; settings = {ATTRIBUTES = (Public, ); }; };
103 103 4E08FB9421D364300042166B /* CNLiveToastContentView.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E08FB8721D364300042166B /* CNLiveToastContentView.h */; settings = {ATTRIBUTES = (Public, ); }; };
104 104 4E08FB9521D364300042166B /* CNLiveToastView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4E08FB8821D364300042166B /* CNLiveToastView.m */; };
105 105 4E08FB9621D364300042166B /* CNLiveToastBackgroundView.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E08FB8921D364300042166B /* CNLiveToastBackgroundView.h */; settings = {ATTRIBUTES = (Public, ); }; };
106 106 4E08FB9721D364300042166B /* CNLiveToastAnimator.m in Sources */ = {isa = PBXBuildFile; fileRef = 4E08FB8A21D364300042166B /* CNLiveToastAnimator.m */; };
107 107 4E08FB9821D364300042166B /* .gitkeep in Resources */ = {isa = PBXBuildFile; fileRef = 4E08FB8C21D364300042166B /* .gitkeep */; };
  108 + 4EBB278B21F1AC2700B3C91D /* CNLiveTips.h in Headers */ = {isa = PBXBuildFile; fileRef = 4EBB278921F1AC2700B3C91D /* CNLiveTips.h */; };
  109 + 4EBB278C21F1AC2700B3C91D /* CNLiveTips.m in Sources */ = {isa = PBXBuildFile; fileRef = 4EBB278A21F1AC2700B3C91D /* CNLiveTips.m */; };
108 110 4F3D26CB2FE6F03D02F0C49755CAD3D9 /* UICollectionView+QMUICellSizeKeyCache.m in Sources */ = {isa = PBXBuildFile; fileRef = CCB6A17FB5E745A52EDC0FC41A4F8296 /* UICollectionView+QMUICellSizeKeyCache.m */; };
109 111 4F6471C98DB4C025AEACB51FEFB26363 /* QMUILogItem.h in Headers */ = {isa = PBXBuildFile; fileRef = 6178F81A5DCE840951801F0B9BD0BBB9 /* QMUILogItem.h */; settings = {ATTRIBUTES = (Public, ); }; };
110 112 5024A4F47B6AE06635A97D895919C068 /* NSArray+QMUI.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CBCC2CED44C83247713DE526F707C6A /* NSArray+QMUI.m */; };
... ... @@ -412,10 +414,10 @@
412 414 4D850ABD913ABEBD0DDB6DF2CED64C70 /* QMUIToolbarButton.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = QMUIToolbarButton.m; path = QMUIKit/QMUIComponents/QMUIButton/QMUIToolbarButton.m; sourceTree = "<group>"; };
413 415 4E08FB8021D364300042166B /* CNLiveToastView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CNLiveToastView.h; sourceTree = "<group>"; };
414 416 4E08FB8121D364300042166B /* CNLiveToastContentView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CNLiveToastContentView.m; sourceTree = "<group>"; };
415   - 4E08FB8221D364300042166B /* CNLiveTips.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CNLiveTips.m; sourceTree = "<group>"; };
  417 + 4E08FB8221D364300042166B /* CNLiveShowTips.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CNLiveShowTips.m; sourceTree = "<group>"; };
416 418 4E08FB8321D364300042166B /* CNLiveToastBackgroundView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CNLiveToastBackgroundView.m; sourceTree = "<group>"; };
417 419 4E08FB8521D364300042166B /* CNLiveToastAnimator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CNLiveToastAnimator.h; sourceTree = "<group>"; };
418   - 4E08FB8621D364300042166B /* CNLiveTips.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CNLiveTips.h; sourceTree = "<group>"; };
  420 + 4E08FB8621D364300042166B /* CNLiveShowTips.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CNLiveShowTips.h; sourceTree = "<group>"; };
419 421 4E08FB8721D364300042166B /* CNLiveToastContentView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CNLiveToastContentView.h; sourceTree = "<group>"; };
420 422 4E08FB8821D364300042166B /* CNLiveToastView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CNLiveToastView.m; sourceTree = "<group>"; };
421 423 4E08FB8921D364300042166B /* CNLiveToastBackgroundView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CNLiveToastBackgroundView.h; sourceTree = "<group>"; };
... ... @@ -423,6 +425,8 @@
423 425 4E08FB8C21D364300042166B /* .gitkeep */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .gitkeep; sourceTree = "<group>"; };
424 426 4EAB1C72CEACC749511F82D680CB3CF0 /* UITableView+QMUIStaticCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UITableView+QMUIStaticCell.h"; path = "QMUIKit/QMUIComponents/StaticTableView/UITableView+QMUIStaticCell.h"; sourceTree = "<group>"; };
425 427 4EAD16142E5A442F1D766F3A5D49BB0D /* QMUIHelper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = QMUIHelper.m; path = QMUIKit/QMUICore/QMUIHelper.m; sourceTree = "<group>"; };
  428 + 4EBB278921F1AC2700B3C91D /* CNLiveTips.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CNLiveTips.h; sourceTree = "<group>"; };
  429 + 4EBB278A21F1AC2700B3C91D /* CNLiveTips.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CNLiveTips.m; sourceTree = "<group>"; };
426 430 4F1F717D2A0F5A721EB82C4F5487E962 /* QMUISearchBar.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = QMUISearchBar.h; path = QMUIKit/QMUIComponents/QMUISearchBar.h; sourceTree = "<group>"; };
427 431 4F99588BE293DF0528770A7C21A81FDB /* QMUIGridView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = QMUIGridView.h; path = QMUIKit/QMUIComponents/QMUIGridView.h; sourceTree = "<group>"; };
428 432 4FBA584E8D69023B04F3E9C0EE13AC4B /* NSObject+QMUI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSObject+QMUI.h"; path = "QMUIKit/UIKitExtensions/NSObject+QMUI.h"; sourceTree = "<group>"; };
... ... @@ -903,8 +907,10 @@
903 907 4E08FB7F21D364300042166B /* Classes */ = {
904 908 isa = PBXGroup;
905 909 children = (
906   - 4E08FB8621D364300042166B /* CNLiveTips.h */,
907   - 4E08FB8221D364300042166B /* CNLiveTips.m */,
  910 + 4E08FB8621D364300042166B /* CNLiveShowTips.h */,
  911 + 4E08FB8221D364300042166B /* CNLiveShowTips.m */,
  912 + 4EBB278921F1AC2700B3C91D /* CNLiveTips.h */,
  913 + 4EBB278A21F1AC2700B3C91D /* CNLiveTips.m */,
908 914 4E08FB8921D364300042166B /* CNLiveToastBackgroundView.h */,
909 915 4E08FB8321D364300042166B /* CNLiveToastBackgroundView.m */,
910 916 4E08FB8721D364300042166B /* CNLiveToastContentView.h */,
... ... @@ -1744,9 +1750,10 @@
1744 1750 isa = PBXHeadersBuildPhase;
1745 1751 buildActionMask = 2147483647;
1746 1752 files = (
1747   - 4E08FB9321D364300042166B /* CNLiveTips.h in Headers */,
  1753 + 4E08FB9321D364300042166B /* CNLiveShowTips.h in Headers */,
1748 1754 4E08FB8D21D364300042166B /* CNLiveToastView.h in Headers */,
1749 1755 4E08FB9421D364300042166B /* CNLiveToastContentView.h in Headers */,
  1756 + 4EBB278B21F1AC2700B3C91D /* CNLiveTips.h in Headers */,
1750 1757 4E08FB9221D364300042166B /* CNLiveToastAnimator.h in Headers */,
1751 1758 4E08FB9621D364300042166B /* CNLiveToastBackgroundView.h in Headers */,
1752 1759 18352290EE9A979E4F0F9B8F2C3C4BBB /* CNLiveTips-umbrella.h in Headers */,
... ... @@ -1916,12 +1923,13 @@
1916 1923 isa = PBXSourcesBuildPhase;
1917 1924 buildActionMask = 2147483647;
1918 1925 files = (
1919   - 4E08FB8F21D364300042166B /* CNLiveTips.m in Sources */,
  1926 + 4E08FB8F21D364300042166B /* CNLiveShowTips.m in Sources */,
1920 1927 4E08FB9021D364300042166B /* CNLiveToastBackgroundView.m in Sources */,
1921 1928 01A3A4DCE06B557F615925FFF32D1E5A /* CNLiveTips-dummy.m in Sources */,
1922 1929 4E08FB8E21D364300042166B /* CNLiveToastContentView.m in Sources */,
1923 1930 4E08FB9521D364300042166B /* CNLiveToastView.m in Sources */,
1924 1931 4E08FB9721D364300042166B /* CNLiveToastAnimator.m in Sources */,
  1932 + 4EBB278C21F1AC2700B3C91D /* CNLiveTips.m in Sources */,
1925 1933 );
1926 1934 runOnlyForDeploymentPostprocessing = 0;
1927 1935 };
... ...