关于信息提示框的问题

原创 2016年05月30日 22:59:30

从app启动开始进行网络请求的时候,网速再快也需要那么一两秒空白期,而这个时间段,大家都会做一个等待动画来安慰一下用户的急躁心理,有好多出名的第三方,比如MBProgressHUD等。大家在一个一个网络请求的时候当然很简单直接add,而当同时两个网络请求?三个?。。。是不是得有好多hub展示在view上?噢唛嘎,简直不忍直视。在这,我很早以前就封装了一套,可以一句话就搞定这些东东,大家只需要傻瓜似的往里加就行。说说思路吧,楼主都是给view写一个分类来管理这些东东,代码在github

思路来自于ARC,当初没有ARC的时候,都是手动管理内存,每个对象都有个计数器,每次retain…等retaincount都会加一而release的时候都会减一,当为0的时候就释放,而我的hud也有一个自己的count,每次show的时候count都会加一,每次dismiss的时候都会减一,当为0的时候就会彻底dismiss,看代码,很清晰

-(void)showRequestNumIndeterminateHubText:(NSString *)text{

    dispatch_async(dispatch_get_main_queue(), ^{
        MBProgressHUDRequestView *hub = (MBProgressHUDRequestView *)[self viewWithTag:REQUESTHUBTAG];
        if (!hub) {
            MBProgressHUDRequestView * hub = [MBProgressHUDRequestView showHUDAddedTo:self animated:NO];
            hub.RequestNum = 1;
            if ([Tools isEmpty:text]) {
                hub.labelText = @"数据加载中...";
            }else{
                hub.labelText = text;
            }
            hub.tag = REQUESTHUBTAG;
            hub.mode = MBProgressHUDModeIndeterminate;
            [hub show:YES];
        }else{
            [hub show:YES];
            hub.RequestNum += 1;
        }

    });
}
-(void)dismissRequestHUD{
    dispatch_async(dispatch_get_main_queue(), ^{
        MBProgressHUDRequestView *hub = (MBProgressHUDRequestView *)[self viewWithTag:REQUESTHUBTAG];
        if (hub && hub.RequestNum > 0) {
            hub.RequestNum -= 1;
        }
        if(hub){
            if (hub.RequestNum == 0 || hub.RequestNum < 0) {
                hub.RequestNum = 0;
                [hub hide:NO];
                hub = nil;
            }
        }
    });

}

每次添加hud的时候只有一个hud展示,每次只是requestcount 加一,记得两个配套使用 , 主要在思路。

再说说每次如果有好几个网络错误或者异常的提示信息怎么办,会不会一堆很恶习的view重叠在一起,让人无处下手,这边,再次说说思路,在分类中创建一个自定义的展示messagelabel,确保,每次同一个view只有一个messagelabel,这个不难,提示都是过n秒消失,这个有好几种写法,我就最简单的perfrom……方法,咱们就在每次展示提示信息的时候进行判断需要展示的内容,如果一样,不用管后面,如果不一样,则取消此次定时事件,重新展示新内容,而messagelabel还是同一个。

-(void)showMessageBottom:(NSString *)message afterDelay:(NSTimeInterval)delay {

    UILabel *oldLabel = [self MessageLabel];
    if (!oldLabel) {
        UILabel *label = [self creatLabel:message];
        label.y = kScreen_Height - 30 - label.height;
        [self performSelector:@selector(disTipLabel) withObject:nil afterDelay:delay];
    }else {
        if ([oldLabel.text isEqualToString: message]){
        return;
        }
        [NSObject cancelPreviousPerformRequestsWithTarget:self];
        oldLabel.text = message;
        [self performSelector:@selector(disTipLabel) withObject:nil afterDelay:delay];
    }
}
/**
 *  移除label
 */
-(void)disTipLabel {
     UILabel * label = (UILabel *)[self viewWithTag:MessageLabel_tag];
    if (label) {
        [label removeFromSuperview];
        label = nil;
    }
}
-(UILabel *)MessageLabel
{
    UILabel * label = (UILabel *)[self viewWithTag:MessageLabel_tag];
    return label;
}

这些都需要配套使用,在哪儿show,就得必须有dismiss,否则要么提前hud或者messageLabel消失,要么永远都在。

版权声明:本文为博主原创文章,未经博主允许不得转载。

安卓弹出信息提示框

  • 2016年01月08日 13:34
  • 2.64MB
  • 下载

Java中信息提示框的四种类型

Java中信息提示框的四种类型标签(空格分隔): javajava中弹出提示框的四种方式:  ConfirmDialog—确认对话框,用户点击“YES” or “No”  InputDialog—...

asp.net下的信息提示框

  • 2008年08月20日 17:10
  • 13KB
  • 下载

qml自定义信息提示框

  • 2017年10月28日 16:21
  • 6KB
  • 下载

关于DELPHI 弹出提示框信息的叙述

转自http://blog.csdn.net/appleric/article/details/5647769 函数功能:该函数创建、显示、和操作一个消息框。消息框含有应用程序定义的消息和标题,加上...

javascript透明信息提示框

  • 2013年01月17日 20:54
  • 16KB
  • 下载

类似QQ 信息提示框

  • 2009年05月08日 09:28
  • 5KB
  • 下载

Strut2 action 在前台弹出信息提示框

copy下来的,作为参考资料: 第一种:在struts2 action中弹出Js脚本提示信息 让action实现ServletResponseAware接口,同时实现其setServletResp...
  • ronin92
  • ronin92
  • 2014年01月12日 22:35
  • 647
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于信息提示框的问题
举报原因:
原因补充:

(最多只允许输入30个字)