From 7b02207537d35bfa1714bf8beafc921f717d100a Mon Sep 17 00:00:00 2001 From: 单军华 Date: Wed, 11 Jul 2018 10:47:42 +0800 Subject: [PATCH] 首次上传 --- screendisplay/screendisplay/Classes/Helpers/JXTAlertController.m | 252 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 252 insertions(+), 0 deletions(-) diff --git a/screendisplay/screendisplay/Classes/Helpers/JXTAlertController.m b/screendisplay/screendisplay/Classes/Helpers/JXTAlertController.m new file mode 100755 index 0000000..d232aad --- /dev/null +++ b/screendisplay/screendisplay/Classes/Helpers/JXTAlertController.m @@ -0,0 +1,252 @@ +// +// JXTAlertController.m +// JXTAlertManager +// +// Created by JXT on 2016/12/22. +// Copyright �� 2016��� JXT. All rights reserved. +// + +#import "JXTAlertController.h" +#import "UIWindow+CurrentViewController.h" + +//toast������������������ +static NSTimeInterval const JXTAlertShowDurationDefault = 1.0f; + + +#pragma mark - I.AlertActionModel +@interface JXTAlertActionModel : NSObject +@property (nonatomic, copy) NSString * title; +@property (nonatomic, assign) UIAlertActionStyle style; +@end +@implementation JXTAlertActionModel +- (instancetype)init +{ + if (self = [super init]) { + self.title = @""; + self.style = UIAlertActionStyleDefault; + } + return self; +} +@end + + + +#pragma mark - II.JXTAlertController +/** + AlertActions������ + + @param actionBlock JXTAlertActionBlock + */ +typedef void (^JXTAlertActionsConfig)(JXTAlertActionBlock actionBlock); + + +@interface JXTAlertController () +//JXTAlertActionModel������ +@property (nonatomic, strong) NSMutableArray <JXTAlertActionModel *>* jxt_alertActionArray; +//������������������ +@property (nonatomic, assign) BOOL jxt_setAlertAnimated; +//action������ +- (JXTAlertActionsConfig)alertActionsConfig; +@end + +@implementation JXTAlertController + +- (void)viewDidLoad { + [super viewDidLoad]; +} +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; +} +- (void)viewDidDisappear:(BOOL)animated +{ + [super viewDidDisappear:animated]; + if (self.alertDidDismiss) { + self.alertDidDismiss(); + } +} +- (void)dealloc +{ + NSLogFunc; +} + +#pragma mark - Private +//action-title������ +- (NSMutableArray<JXTAlertActionModel *> *)jxt_alertActionArray +{ + if (_jxt_alertActionArray == nil) { + _jxt_alertActionArray = [NSMutableArray array]; + } + return _jxt_alertActionArray; +} +//action������ +- (JXTAlertActionsConfig)alertActionsConfig +{ + return ^(JXTAlertActionBlock actionBlock) { + if (self.jxt_alertActionArray.count > 0) + { + //������action + __weak typeof(self)weakSelf = self; + + [self.jxt_alertActionArray enumerateObjectsUsingBlock:^(JXTAlertActionModel *actionModel, NSUInteger idx, BOOL * _Nonnull stop) { + UIAlertAction *alertAction = [UIAlertAction actionWithTitle:actionModel.title style:actionModel.style handler:^(UIAlertAction * _Nonnull action) { + __strong typeof(weakSelf)strongSelf = weakSelf; + if (actionBlock) { + actionBlock(idx, action, strongSelf); + } + }]; + //������������������������������������������������������������ +// [alertAction setValue:[UIColor grayColor] forKey:@"titleTextColor"]; + //action������self������������block������������������������������������������������������ + [weakSelf addAction:alertAction]; + }]; + } + else + { + NSTimeInterval duration = self.toastStyleDuration > 0 ? self.toastStyleDuration : JXTAlertShowDurationDefault; + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(duration * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + [self dismissViewControllerAnimated:!(self.jxt_setAlertAnimated) completion:NULL]; + }); + } + }; +} + +#pragma mark - Public + +- (instancetype)initAlertControllerWithTitle:(NSString *)title message:(NSString *)message preferredStyle:(UIAlertControllerStyle)preferredStyle +{ + if (!(title.length > 0) && (message.length > 0) && (preferredStyle == UIAlertControllerStyleAlert)) { + title = @""; + } + + self = [[self class] alertControllerWithTitle:title message:message preferredStyle:preferredStyle]; + + if (!self) return nil; + + self.jxt_setAlertAnimated = NO; + self.toastStyleDuration = JXTAlertShowDurationDefault; + + return self; +} + + +- (void)alertAnimateDisabled +{ + self.jxt_setAlertAnimated = YES; +} + + +#pragma mark - addButton + +- (JXTAlertActionTitle)addActionDefaultTitle +{ + //���block��������������������������������������������������������������������������� + return ^(NSString *title) { + JXTAlertActionModel *actionModel = [[JXTAlertActionModel alloc] init]; + actionModel.title = title; + actionModel.style = UIAlertActionStyleDefault; + [self.jxt_alertActionArray addObject:actionModel]; + return self; + }; +} + +- (JXTAlertActionTitle)addActionCancelTitle +{ + return ^(NSString *title) { + JXTAlertActionModel *actionModel = [[JXTAlertActionModel alloc] init]; + actionModel.title = title; + actionModel.style = UIAlertActionStyleCancel; + [self.jxt_alertActionArray addObject:actionModel]; + return self; + }; +} + +- (JXTAlertActionTitle)addActionDestructiveTitle +{ + return ^(NSString *title) { + JXTAlertActionModel *actionModel = [[JXTAlertActionModel alloc] init]; + actionModel.title = title; + actionModel.style = UIAlertActionStyleDestructive; + [self.jxt_alertActionArray addObject:actionModel]; + return self; + }; +} + +@end + + + +#pragma mark - III.UIViewController������ +@implementation UIViewController (JXTAlertController) + +- (void)jxt_showAlertWithPreferredStyle:(UIAlertControllerStyle)preferredStyle title:(NSString *)title message:(NSString *)message appearanceProcess:(JXTAlertAppearanceProcess)appearanceProcess actionsBlock:(JXTAlertActionBlock)actionBlock +{ + if (appearanceProcess) + { + JXTAlertController *alertMaker = [[JXTAlertController alloc] initAlertControllerWithTitle:title message:message preferredStyle:preferredStyle]; + //������nil + if (!alertMaker) { + return ; + } + //��������� + !appearanceProcess ?: appearanceProcess(alertMaker); + //������������ + alertMaker.alertActionsConfig(actionBlock); + + [self presentViewController:alertMaker animated:!(alertMaker.jxt_setAlertAnimated) completion:^{ + !alertMaker.alertDidShown ?: alertMaker.alertDidShown(); + }]; + } +} + +- (void)jxt_showAlertWithTitle:(NSString *)title message:(NSString *)message appearanceProcess:(JXTAlertAppearanceProcess)appearanceProcess actionsBlock:(JXTAlertActionBlock)actionBlock +{ + dispatch_async(dispatch_get_main_queue(), ^{ + [self jxt_showAlertWithPreferredStyle:UIAlertControllerStyleAlert title:title message:message appearanceProcess:appearanceProcess actionsBlock:actionBlock]; + }); +} + +- (void)jxt_showActionSheetWithTitle:(NSString *)title message:(NSString *)message appearanceProcess:(JXTAlertAppearanceProcess)appearanceProcess actionsBlock:(JXTAlertActionBlock)actionBlock +{ + dispatch_async(dispatch_get_main_queue(), ^{ + [self jxt_showAlertWithPreferredStyle:UIAlertControllerStyleActionSheet title:title message:message appearanceProcess:appearanceProcess actionsBlock:actionBlock]; + }); +} + + +@end + +@implementation UIAlertController (LMJ) + +/** + JXTAlertController: show-alert(iOS8) + + @param title title + @param message message + @param appearanceProcess alert������������ + @param actionBlock alert������������������ + */ ++ (void)mj_showAlertWithTitle:(nullable NSString *)title + message:(nullable NSString *)message + appearanceProcess:(JXTAlertAppearanceProcess)appearanceProcess + actionsBlock:(nullable JXTAlertActionBlock)actionBlock NS_AVAILABLE_IOS(8_0) +{ + [[UIWindow zf_currentViewController] jxt_showAlertWithTitle:title message:message appearanceProcess:appearanceProcess actionsBlock:actionBlock]; +} + +/** + JXTAlertController: show-actionSheet(iOS8) + + @param title title + @param message message + @param appearanceProcess actionSheet������������ + @param actionBlock actionSheet������������������ + */ ++ (void)mj_showActionSheetWithTitle:(nullable NSString *)title + message:(nullable NSString *)message + appearanceProcess:(JXTAlertAppearanceProcess)appearanceProcess + actionsBlock:(nullable JXTAlertActionBlock)actionBlock NS_AVAILABLE_IOS(8_0) +{ + [[UIWindow zf_currentViewController] jxt_showActionSheetWithTitle:title message:message appearanceProcess:appearanceProcess actionsBlock:actionBlock]; +} +@end + -- Gitblit v1.8.0