123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518 |
- //
- // RDSBaseViewController.m
- // SmartLightForBigFish
- //
- // Created by coderYK on 2017/8/7.
- // Copyright © 2017年 RD-iOS. All rights reserved.
- //
- #import "RDSBaseViewController.h"
- #import "NSString+verify.h"
- #import "NSString+hanzi.h"
- #import "RDSNavPushHelper.h"
- #import "UIImage+Extension.h"
- @interface RDSBaseViewController ()
- @property (nonatomic, copy) void(^contactGetResultBlock)(NSString *result); // ** 联系方式获取的回调*/
- @property (nonatomic, strong) UIBarButtonItem *space;
- @property (nonatomic, copy) NSString *orgMsg;
- @property (nonatomic, assign) BOOL isCheckingOnline;// 检查VCC是否在线
- @property (nonatomic, assign) UInt16 checkingAddr;
- @end
- @implementation RDSBaseViewController
- - (void)viewDidLoad {
- [super viewDidLoad];
-
- self.view.backgroundColor = RDSViewBgColor;
-
- self.edgesForExtendedLayout = UIRectEdgeNone;
-
- self.navigationController.navigationBar.frame = CGRectMake(0,kSTATUSBAR_HEIGHT, self.navigationController.navigationBar.frame.size.width,44);
-
- }
- - (void)viewWillDisappear:(BOOL)animated{
- [super viewWillDisappear:animated];
-
- }
- - (BOOL)isActive{
-
-
- // __block BOOL result = NO;
- // dispatch_sync(dispatch_get_main_queue(), ^{
- // dispatch_semaphore_t sema = dispatch_semaphore_create(0);// 主线程中异步转同步 防止卡死
- // // 需要在主线程执行的代码
- // result = (self.isViewLoaded && self.view.window);
- // dispatch_semaphore_signal(sema);
- //
- // dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);
- // });
-
- return YES;
- }
- #pragma mark - Nav
- - (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated{
-
- if (self.navigationController != nil) {
- [self.navigationController pushViewController:viewController animated:animated];
- }
- else{
- [self.tabBarController.navigationController pushViewController:viewController animated:animated];
- }
- }
- - (UIViewController *)popViewControllerAnimated:(BOOL)animated{
-
- if (self.navigationController != nil) {
- return [self.navigationController popViewControllerAnimated:animated];
- }
- else{
- return [self.tabBarController.navigationController popViewControllerAnimated:animated];
- }
- }
- - (NSArray *)popToViewController:(UIViewController *)viewController animated:(BOOL)animated{
-
- if (self.navigationController != nil) {
- return [self.navigationController popToViewController:viewController animated:animated];
- }
- else{
- return [self.tabBarController.navigationController popToViewController:viewController animated:animated];
- }
- }
- - (void)popToRootViewControllerAnimated:(BOOL)animated{
- if (self.navigationController != nil) {
- [self.navigationController popToRootViewControllerAnimated:animated];
- }
- else{
- [self.tabBarController.navigationController popToRootViewControllerAnimated:animated];
- }
- }
- - (void)rds_centerPushViewController:(UIViewController *)viewController {
-
- [RDSNavPushHelper sharedInstance].viewControllerToPush = viewController;
- // [self.sideMenuViewController hideMenuViewController];
- }
- #pragma mark -
- - (void)updateNavigationBarColor:(UIColor *)color {
- // 重置背景和阴影颜色
- //navigation标题文字颜色
- NSDictionary *dic = @{NSForegroundColorAttributeName : [UIColor whiteColor],
- NSFontAttributeName : [UIFont systemFontOfSize:22]};
- if (@available(iOS 15.0, *)) {
- UINavigationBarAppearance *barApp = [UINavigationBarAppearance new];
- // [barApp configureWithOpaqueBackground];
- barApp.backgroundColor = color;
- barApp.shadowColor = UIColor.clearColor;
- barApp.titleTextAttributes = dic;
- self.navigationController.navigationBar.scrollEdgeAppearance = barApp;
- self.navigationController.navigationBar.standardAppearance = barApp;
- }else{
- //背景色
- self.navigationController.navigationBar.barTintColor = color;
- self.navigationController.navigationBar.titleTextAttributes = dic;
- [self.navigationController.navigationBar setShadowImage:[UIImage new]];
- [self.navigationController.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault];
- }
- //不透明
- self.navigationController.navigationBar.translucent = NO;
- //navigation控件颜色
- self.navigationController.navigationBar.tintColor = [UIColor whiteColor];
- }
- - (void)clearColorNavBar{
- //navigation标题文字颜色
- NSDictionary *dic = @{NSForegroundColorAttributeName:[UIColor whiteColor],
- NSFontAttributeName:[UIFont systemFontOfSize:24]};
- if (@available(iOS 15.0, *)) {
- UINavigationBarAppearance *barApp = [UINavigationBarAppearance new];
- barApp.backgroundColor = [UIColor clearColor];
- barApp.titleTextAttributes = dic;
- barApp.backgroundEffect = nil;
- barApp.shadowColor = nil;
- self.navigationController.navigationBar.scrollEdgeAppearance = nil;
- self.navigationController.navigationBar.standardAppearance = barApp;
- }else{
- self.navigationController.navigationBar.titleTextAttributes = dic;
- [self.navigationController.navigationBar setShadowImage:[UIImage new]];
- [self.navigationController.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault];
- }
- //透明
- self.navigationController.navigationBar.translucent = YES;
- //navigation控件颜色
- self.navigationController.navigationBar.tintColor = [UIColor whiteColor];
- }
- // 圆角边框
- - (void)rds_setupArcBorderView:(UIView *)view {
-
- [self rds_setupArcBorderView:view withCornerRadius:5];
- }
- - (void)rds_setupArcBorderView:(UIView *)view withCornerRadius:(CGFloat)radius {
-
- view.layer.cornerRadius = radius;
- view.layer.masksToBounds = YES;
- view.layer.borderWidth = 0.6;
- view.layer.borderColor = [UIColor lightGrayColor].CGColor;
- }
- - (void)rds_setupArcView:(UIView *)view {
-
- view.layer.cornerRadius = 5;
- view.layer.masksToBounds = YES;
- }
- - (BOOL)getPhoneNo:(NSString *)string {
-
- BOOL isPhoneNo = NO;
- if ([string hasPrefix:@"+"]) {
- string = [string substringFromIndex:3];
- }
-
- string = [string stringByReplacingOccurrencesOfString:@"-" withString:@""];
- if ([string isPhoneNum]) {
- isPhoneNo = YES;
- BLOCK_SAFE_RUN(_contactGetResultBlock, string)
- } else {
- [RDSHudShower showErrorWithStatus:@"手机号码格式不正确"];
- isPhoneNo = NO;
- BLOCK_SAFE_RUN(_contactGetResultBlock, nil)
- }
- return isPhoneNo;
- }
- - (UIButton *)rds_addSaveBtnOnNavBarWithAction:(SEL)action {
-
- UIButton *saveBtn = [UIButton buttonWithType:UIButtonTypeCustom];
- [saveBtn setTitle:@"保存" forState:UIControlStateNormal];
- [saveBtn setTitleColor:RDSThemeColor forState:UIControlStateNormal];
- saveBtn.titleLabel.font = [UIFont boldSystemFontOfSize:18];
- saveBtn.frame = CGRectMake(0, 0, 44, 30);
- [saveBtn addTarget:self action:action forControlEvents:UIControlEventTouchUpInside];
- [self.navigationItem setRightBarButtonItem:[[UIBarButtonItem alloc] initWithCustomView:saveBtn]];
- return saveBtn;
- }
- - (void)rds_addAddBtnOnNavBarWithAction:(SEL)action {
-
- UIButton *addBtn = [UIButton buttonWithType:UIButtonTypeCustom];
- //addBtn.tintColor = [UIColor darkTextColor];
- [addBtn setImage:[[UIImage imageNamed:@"icon_add"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal] forState:UIControlStateNormal];
- addBtn.frame = CGRectMake(0, 0, 44, 30);
- //addBtn.layer.cornerRadius = 5;
- //addBtn.layer.borderWidth = 1;
- //addBtn.layer.borderColor = [UIColor grayColor].CGColor;
- [addBtn addTarget:self action:action forControlEvents:UIControlEventTouchUpInside];
- [self.navigationItem setRightBarButtonItem:[[UIBarButtonItem alloc] initWithCustomView:addBtn]];
- }
- - (UIBarButtonItem *)rds_barButtonItemWithImage:(NSString *)imageName andAction:(SEL)action {
-
- UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
- btn.tintColor = [UIColor whiteColor];//RDS_DARK_TEXT_COLOR;
- UIImage *btnImg = [[UIImage imageNamed:imageName] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
- [btn setImage:btnImg forState:UIControlStateNormal];
- [btn setImage:btnImg forState:UIControlStateHighlighted];
- [btn sizeToFit];
- [btn addTarget:self action:action forControlEvents:UIControlEventTouchUpInside];
- UIBarButtonItem *barItem = [[UIBarButtonItem alloc] initWithCustomView:btn];
- return barItem;
- }
- - (void)rds_alertMessage:(NSString *)message {
-
- UIAlertController *ac = [UIAlertController alertControllerWithTitle:message
- message:@""
- preferredStyle:UIAlertControllerStyleAlert];
- UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:^(UIAlertAction * action) {
-
- }];
-
- [ac addAction:okAction];
-
- [self presentViewController:ac animated:YES completion:nil];
- }
- - (void)rds_alertMessage:(NSString *)message doneAction:(void(^)(void))doneActionBlock {
-
- UIAlertController *ac = [UIAlertController alertControllerWithTitle:@"提示"
- message:message
- preferredStyle:UIAlertControllerStyleAlert];
- UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:^(UIAlertAction * action) {
-
- if (doneActionBlock) {
- doneActionBlock();
- }
- }];
- UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * action) {
-
- }];
-
- [ac addAction:okAction]; // A
- [ac addAction:cancelAction]; // B
-
- [self presentViewController:ac animated:YES completion:nil];
- }
- - (void)rds_alertInputTitle:(NSString *)title msg:(NSString *)msg placeholder:(NSString *)placeholder doneAction:(void(^)(NSString *name))doneActionBlock{
-
- UIAlertController *ac = [UIAlertController alertControllerWithTitle:title
- message:msg
- preferredStyle:UIAlertControllerStyleAlert];
- _orgMsg = msg;
- // 添加文本框
- [ac addTextFieldWithConfigurationHandler:^(UITextField * _Nonnull textField) {
- textField.placeholder = placeholder;
- //textField.text = placeholder;
- [textField addTarget:self action:@selector(p_alertInputDidChange:) forControlEvents:UIControlEventEditingChanged];
-
- //textField.keyboardType = UIKeyboardTypeASCIICapable;
-
- // if ([title isEqualToString:@"身高"] || [title isEqualToString:@"体重"]) {
- // textField.keyboardType = UIKeyboardTypeNumberPad;
- // }
- }];
-
-
- UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleDefault handler:^(UIAlertAction * action) {
- }];
- UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:^(UIAlertAction * action) {
- NSString *string = ac.textFields.firstObject.text;
- if (doneActionBlock) {
- doneActionBlock(string);
- }
- }];
-
- okAction.enabled = YES;
- [ac addAction:cancelAction];
- [ac addAction:okAction];
-
- // 修改按钮字体颜色
- [cancelAction setValue:RDSBlackColor forKey:@"_titleTextColor"];
- // [okAction setValue:RDSThemeColor forKey:@"_titleTextColor"];
-
-
- // 修改标题字体颜色
- if(!kNULLString(title)){
- NSMutableAttributedString *titleAtt = [[NSMutableAttributedString alloc] initWithString:title];
- [titleAtt addAttribute:NSForegroundColorAttributeName value:kDarkTextColor range:NSMakeRange(0, title.length)];
- [titleAtt addAttribute:NSFontAttributeName value:[UIFont boldSystemFontOfSize:18] range:NSMakeRange(0, title.length)];
- [ac setValue:titleAtt forKey:@"attributedTitle"];
- }
-
-
-
- // 修改msg字体颜色
- if (!kNULLString(msg)) {
- NSMutableAttributedString *msgAtt = [[NSMutableAttributedString alloc] initWithString:msg];
- [msgAtt addAttribute:NSForegroundColorAttributeName value:kDarkTextColor range:NSMakeRange(0, msg.length)];
- [msgAtt addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:16] range:NSMakeRange(0, msg.length)];
- [ac setValue:msgAtt forKey:@"attributedMessage"];
- }
-
-
-
-
- // 3.显示控制器
- [self presentViewController:ac animated:YES completion:nil];
- }
- - (void)p_alertInputDidChange:(UITextField *)sender{
-
- UIAlertController *ac = (UIAlertController *)self.presentedViewController;
- if (ac) {
- UIAlertAction *okAction = ac.actions.lastObject;
- NSString *string = ac.textFields.firstObject.text;
- NSString *msg = _orgMsg;
- NSUInteger length = [string rds_countStringByteLength];
-
- if ([ac.title isEqualToString:@"身高"]) {
-
- NSString *str = string;
- if (str.intValue < 20) {
- okAction.enabled = NO;
- ac.message = @"";
- }else if (str.intValue > 300){
- okAction.enabled = NO;
- ac.message = @"";
- }
- else{
- okAction.enabled = YES;
- ac.message = @"";
- }
- return;
- }
- else if ([ac.title isEqualToString:@"体重"]){
- NSString *str = string;
- if (str.intValue < 2) {
- okAction.enabled = NO;
- ac.message = @"";
- }else if (str.intValue > 300){
- okAction.enabled = NO;
- ac.message = @"";
- }
- else{
- okAction.enabled = YES;
- ac.message = @"";
- }
- return;
- }
-
- if (length >0 && length <= 20) {
- okAction.enabled = YES;
- ac.message = msg;
- }
- else if (length == 0){
- okAction.enabled = YES;
- ac.message = msg;
- }
- else if (length > 20){
- okAction.enabled = YES;
- ac.message = _orgMsg;//@"名称字数超过限制(10个中文字符或20个英文字符)";
- ac.textFields.firstObject.text = [string substringToIndex:length-1];
- }
- }
- }
- - (void)rds_alertTimePickerTitle:(NSString *)title date:(NSDate *)date doneAction:(void (^)(NSDate *))doneActionBlock{
-
- UIDatePicker *datePicker = [[UIDatePicker alloc] init];
- datePicker.datePickerMode = UIDatePickerModeTime;
- if (@available(iOS 13.4, *)) {
- datePicker.preferredDatePickerStyle = UIDatePickerStyleWheels;
- } else {
- // Fallback on earlier versions
- }
-
- // 设置当前显示时间
- [datePicker setDate:date animated:YES];
-
-
- UIAlertController *ac = [UIAlertController alertControllerWithTitle:@"\n\n\n\n\n\n\n\n"
- message:nil
- preferredStyle:UIAlertControllerStyleAlert];
-
- [ac.view addSubview:datePicker];
-
- // 居中
- [datePicker mas_makeConstraints:^(MASConstraintMaker *make) {
- make.centerX.equalTo(ac.view);
- make.centerY.equalTo(ac.view).with.offset(-22);
- }];
-
-
- UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"DONE" style:UIAlertActionStyleDefault handler:^(UIAlertAction * action) {
-
- NSDateFormatter* dateFormat = [[NSDateFormatter alloc] init];
- [dateFormat setDateFormat:@"HH:mm"];
- NSString *dateString = [dateFormat stringFromDate:datePicker.date];
- NSLog(@"%@",dateString);
-
- if (doneActionBlock) {
- doneActionBlock(datePicker.date);
- }
- }];
- UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"CANCEL" style:UIAlertActionStyleCancel handler:^(UIAlertAction * action) {
-
- }];
-
- [ac addAction:okAction];
- [ac addAction:cancelAction];
-
- [self presentViewController:ac animated:YES completion:nil];
-
- }
- - (void)rds_showControllerOnWindow {
-
- // RDSSideMenuViewController *rootVC = (RDSSideMenuViewController *)[UIApplication sharedApplication].keyWindow.rootViewController;
- // [rootVC.contentViewController addChildViewController:self];
- [[UIApplication sharedApplication].keyWindow addSubview:self.view];
- }
- - (void)rds_dismissControllerOnWindow {
-
- [self.view removeFromSuperview];
- [self removeFromParentViewController];
- }
- - (NSString *)rds_getHexNameFromString:(NSString *)name withByte:(NSUInteger)byte {
-
- NSString *hexName = [self rds_stringTohexString:name];
- int offset = (int)(byte*2 - hexName.length);
- for (int i = 0; i < offset; i++) {
- hexName = [NSString stringWithFormat:@"%@0",hexName];
- }
- return hexName;
- }
- - (NSString *)rds_stringTohexString:(NSString *)string {
-
- NSMutableString *strM = [NSMutableString string];
- for (int i=0; i<string.length; i++) {
- NSString *code = [NSString stringWithFormat:@"%02x", [string characterAtIndex:i]];
- [strM appendString:code];
- }
- return strM;
- }
- - (void)rds_showJuHuaOnWindow {
-
- if (self.juHua == nil) {
- UIActivityIndicatorView *juHua = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
- self.juHua = juHua;
- self.juHua.hidesWhenStopped = YES;
- [[UIApplication sharedApplication].keyWindow addSubview:self.juHua];
- self.juHua.center = [UIApplication sharedApplication].keyWindow.center;
- }
- [self.juHua startAnimating];
- }
- - (NSArray<UIBarButtonItem *> *)rds_barItemsWithImage:(UIImage *)image target:(id)target andSelector:(SEL)selector needAdjustSpace:(BOOL)need {
-
- UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 35, 35)];
- // UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
- // [button setBackgroundImage:image forState:UIControlStateNormal];
- // [button sizeToFit];
- [button addTarget:target action:selector forControlEvents:UIControlEventTouchUpInside];
- UIBarButtonItem *item = [[UIBarButtonItem alloc] initWithCustomView:button];
- if (need) {
- return @[self.space, item];
- }
- return @[item];
- }
- - (UIBarButtonItem *)space {
-
- if (_space == nil) {
- _space = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace
- target:nil action:nil];
- _space.width = isIOS11? -10 : -5;
- }
- return _space;
- }
- - (void)didReceiveMemoryWarning {
- [super didReceiveMemoryWarning];
- // Dispose of any resources that can be recreated.
- }
- @end
|