[iOS]一行代码集成空白页面占位图(基于runtime+MJRefresh思想)

题图:复星公司董事长 郭广昌先生

LYEmptyView

此框架是我在5,5个月前,集团启动新品类的时候,一起起首最先编制的,经过那个类型的验证与考验,不断的开展宏观,在此特将那份框架分享出来供我们参考与读书。
github地址:https://github.com/yangli-dev/LYEmptyView

不必要遵从协议,不必要安装代理,不须要完成代理方法,只需这一句代码,就可为一个UITableViwe/UICollectionView集成空白页面占位图。self.tableView.ly_emptyView = [MyDIYEmpty diyNoDataEmpty];

■按:

目录

  • 一 效果体现
  • 二 使用参考示例
    • 1 一行代码集成空内容视图
    • 2 自由拔取空内容元素
    • 3 自定义空内容元素
    • 4 自定义元素的UI样式
    • 5 二次封装
    • 6 延迟展现emptyView
    • 7 特种须求,手动控制emptyView的突显隐藏

25年前,靠着从亲戚朋友处借来的三万八起家,25岁的郭广昌先生和小伙伴创办了复星。25年过去了,复星已经化为了大地出名的投资公司。可以设想,这么些年她在工作中所总计的店家老董文学与入股之道,应该能让很五人负有启发。当您读完本文后,会意识确实有实绩的集团家,他的价值观必将是稳步且不难的。

一 效果体现

show.gif

ImitateOtherApp.png

正如郭广昌先生说的:「我是学医学的,也不懂怎么办经营,那一个年咱们就是一句话——边学边做,不断否定自己,看到难点然后解决难点。」

二 使用参考示例

主干能力

二十五年走过来,我深切地精通要兑现多少个对象真的不简单。如若不是才子团队,一定无法成功。之所以,复星一贯都是要营造一个佳人团队

复星眼中精英的正式,我想可以用「0.01」来概括,即:我们必要找到那一个可以比最快的人还要快0.01的人;我们意在找到这些比人家在攻读上更强0.01的人;大家更乐于雇佣这几个可以比别人多积累0.01的人

自家间接以为复星有两种资本,一个是账上的财力,一个就是人才。从成立复星开始,大家就把人才放在最要紧的地方。二十五年来,复星能从一个无技术、无开销、无人才的「三无」公司提升成前日的全世界化集团,依靠的主导力量就是人才。那几个年里,复星是怎么用人的?如果要本人来做一个计算的话,我对人才的意见可能有上边多少个方面:

1)集团家精神

在复星,我直接强调每一个人都要有「公司家精神」,何谓「公司家精神」?具体来说,就是您在铺子办事,要充满工作的豪情,可以主动对接复星生态系统内的各类资源,不断地立异、创建,不断去学学思想,蒙受难点能创建性地想艺术解决。天天为此而极力

怎么驾驭它?即使把公司比喻成一个球队,大家各类协会成员,都要保全踢球的情形,不可能懈怠。如果有人不在状态,可能就会失球,球队想要赢球就没那么容易了。

2)学学的力量

各种人都有不足,一大半人的智力和协商都大约,但渐渐差距就出来了,差在哪儿?看您会不会学习,不断完善自己。自己直接说,复星唯一提倡的就是读书,要比人家学得更快,领会越来越多。学习是大家最最主要的一个边境线,是和外人竞争的最最要紧的壁垒

本人是学文学的,也不懂如何做经营,这几个年大家就是一句话:边学边做,不断否定自己,看到难题然后解决难题,就是那样一步步走过来的

3)不为经验所困

相似的话,有经验的员工在铺子相比较受欢迎。但对于经历,其实也要辩证地看。经验丰盛的人做事情也许会贯虱穿杨,但多年来形成了永恒的做事习惯,思维形式也会相对固化,改变起来会相比难。我操心这样的人反而不难为涉世所困,在经历里走不出去,很难利用公司的资源去做对的、难的和大的事情。

有一种员工,就是所谓的「大白象」,有自然年龄,经验也很足够,工作中也没怎么错,但未曾创新力,没有工作热情,也不乐意再增加了。

如何幸免?如故不断学习。有些年纪大一些的职工,仍旧保持着好的劳作情景和事业的上进心,愿意不断学习,那是不行值得肯定的。而对青年来说,他或许经验不足,但假诺可以不断学习和揣摩,努力举办自己的境界,那样的小伙子是本身所喜爱的。

4)不希罕一向跳槽的人

一个人对工作一经没有耐心,不敢百折不挠,不去做、不去积累,就做不成事情。我最不喜欢一直跳槽的人。工作上未曾定力,总是觉得现在的阳台不佳,那山瞅着那山高,觉得旁人、其余企业更好。他干活做得不得了,平素不从友好随身寻找难题,总是把原因概括于别人,归咎于集团给她的空中不够。

实际上每个商家都留存有的标题,发现难点是很不难的,抱怨和距离也是便于的,真正考验人的是面对难点,主动想艺术缓解难题,而不是一走了之

5)鞭策一定程度的竞争

自我经营小卖部强调一个「灰度」的概念,公司管理有灰度,各种业务团队之间的工作边界不是一心清楚,有必然灰度;新工作的上进,边界也数十次不是很了解。把每个人的职责范围的清晰,每个人都像螺丝钉一样工作,在这几个年份是无效的。

公司当中的每个人最好能维系一种适于竞争的情状。例如大家一样领域的投资集团会有几支,我们各自寻找最好的路径切入。许多好的投资、创新的好产品,都是从客户必要出发、从内部灰度竞争中迸发出来的。

除此以外,你想在何地投资,就自然要去到那里,去呼吸那里的空气,去感受他们的生存,去和她俩交谈,那是老大尤其主要的。那种感觉可能是您在办公里读1万遍报纸都得不到的

我在经营商家的时候就说,对于每一名员工来说,你可以做哪些,不可以做哪些,也不会有不行肯定的疆界。假使你到复星来,老是问「你要我做什么,我要咋办」,等着自身来配置工作,那您就来错了地点。应该是你进入一个公司,想利用那些集团的资源做哪些事,解决什么难点

6)结果导向

说一千道一万,你在店堂是不是做出了成就,那是绝无仅有的正规化,也是极限的业内。进程主要,但结果更主要。每个人都在工作中,都要对结果承担。

复星有KPI,但我并不主持僵化的KPI考核。我在小卖部鼓励大家,专注工作,做对的事,做难的事,充裕利用集团的平台和资源,想方设法创制性地做事,做大的政工。要耐得住寂寞,每一天升高一点点,追求长久的结果,为公司、也为私有创立更大的价值。

对于这个专注工作、有情感、做出战表的职工,一定要一往直前肯定,给予他们更好的物质和旺盛振奋,提供更大的上涨空间

1 一行代码集成空内容视图

//框架方法
self.tableView.ly_emptyView = [LYEmptyView emptyViewWithImageStr:@"noData"
                                                        titleStr:@"暂无数据,点击重新加载"
                                                       detailStr:@""];

PS:可对框架进行二次封装,调用更精简(二次封装方法在底下的演示5中会讲到)

//二次封装方法,调用简洁
self.tableView.ly_emptyView = [MyDIYEmpty diyNoDataEmpty];

统统低耦合,在你的花色中进入这一行代码就可集成
不管项目中是reloadData方法刷UI照旧insert、delete等艺术刷UI,不需做此外任何操作,只需这一行代码就可完结以下职能

example1.gif

相信的能力

实则公司运营和民用景况同样,总会有高高低低的时候。我觉着做人、做公司就是一场修行,有时候,要把各样困难作为你修行的一个火候。

自我个人比较强调的为人是水,看上去水很柔性,可是它也很坚韧,它无孔不入。水往低处流,不过不见得它并未能力,假以时日,水恰恰是最有力量的

过多事物,只要您想了解了,其实就这么回事。最主要的不是劳苦来的时候你如何是好,而是日常你咋办。若是您在不顺手的时候能做到安心,那必将不会去拜天拜地了,而是你相信自己平常所做的一切都是对的。相信是最重大的东西,要相信自己,相信天天所做的工作。

当然那么些「相信」,一定是根据你经常要咬牙去做对的事。若是你平时横行霸道,那要铭记一点,出来混总是要还的。归根结底,不要等到你遇到标题的时候才去修行,而是没来难点的时候将要去做,那是最要害的。马云(英文名:马云(Jack Ma))有一句话,我蛮认可的:你要修屋顶,要找阳光灿烂的时候,你要更新,一定要在小卖部好的时候。要是你那时候懈怠了,风雨来的时候就完了

比如说,复星一初叶就是多元和业内兼顾。大家很已经看到了大家的毛病所在,所以在专业化上下了功夫。复星医药就是配专业做医药的;复地就是特地做地产的框框投资;要做钢铁,大家就找钢铁业中最标准的团伙来做;复星要满世界化,大家在全世界上布局,推行Glocal战略,就在角落当地寻找最良好的团协会。

对投资来说,资金很要紧,所以大家要找双轮驱动,要做有限支持集团,要多元融资,要找到更好的资源。近来大家要聚焦家庭,也是因为复星看到了未来的市场馆在、机会所在。

我做集团落成现在,自己尤其感到人是索要相信一点怎么的。人在面对前景时并不可能看得很清楚,公司家在追求「商业真理」的长河中,也永远要习惯自己形影相吊地去做定夺。

那会儿公司家最要害的是不可以失去自己的来头,那么公司家该怎么做?该怎么抵挡诱惑、打败贪婪与惧怕?毕竟你内心自然要有谈得来的传统,一定要相信点什么。你最真诚相信的东西,往往最有力量。那里可以跟你享受我深信的几点:

率先、相信集团家精神。我认为,马云(杰克马)所说的集团家精神,其实最焦点的内涵,是强调对结果承担的创业集团家思维。创业公司家的想想,就是着重效能、讲究结果导向,讲究削尖脑袋也要把那个业务做成

第二、我深信不疑中国的文化,包罗东正教、道家和法家,是很平衡的。它会引导大家回到内心,回到真正所需求的事物。往日我看来儒释道三家有三句话觉得蛮有道理:

佛为心。佛家讲究慈悲为怀,大家创业从心里深处依旧乐意为社会做点事,若是没有那么些观念,你会委屈死

道为骨。法家是一个修身的知识,人肉体糟糕的时候工作会受很大影响,所以自己倡导打太极拳,那样能够方便于健全

儒为表。墨家讲究入世,讲究义务感。所以复星从第一天开端就提出「修身齐家立业助天下」的信用社文化,那个看法也是从儒家的「修身齐家治国平天下」来的。法家强调要时时刻刻学习、要入世、要为那一个社会做点工作,我也用那三点来持续鼓励自己。

其三、相信自己。任哪个人必须求为自己做的每一个操纵付出代价。很四人在做一个说了算时候,他以为付这一个代价很情愿,但真让她负责那一个代价的时候,他会说马上那个决定是因为外面种种原因决定的。

历史学上有一句话很有道理:人是任意的,你必要求为你当作自由的人作出的操纵负总责

稍稍人只会说,公司在商海条件下,政坛应该给她随意决策的任务,不过集团家要尤其领悟,你做任何一个操纵,都要为此承担权利,尤其是漏洞卓殊多的操纵。无法说因为自身是为别人着想、因为我是受到各个诱惑,所有的借口都是有反常态的,至少你可以控制不做。

2 自由拔取空内容元素

交互事件可选择SEL或block方式
SEL交互事件:
self.tableView.ly_emptyView = [LYEmptyView emptyActionViewWithImageStr:@"noData"
                                                              titleStr:@"无数据"
                                                             detailStr:@"请稍后再试!"
                                                           btnTitleStr:@"重新加载"
                                                                target:target
                                                                action:action];
block交互事件:
self.tableView.ly_emptyView = [LYEmptyView emptyActionViewWithImageStr:@"noData"
                                                              titleStr:@""
                                                             detailStr:@""
                                                           btnTitleStr:@""
                                                         btnClickBlock:^{}];
//    imageStr    : 占位图片
//    titleStr    : 标题
//    detailStr   : 详细描述
//    btnTitleStr : 按钮标题                                                         

框架提供七个要素,传入相应元素的字符串即可展现对应元素(按钮的显示前提是流传target,action或btnClickBlock)
可依据项目需要,自由进行重组,如下只显示了有些构成功效

example2.png

读书之道

先前俺们倡议第五项修炼,就是强调建设学习型协会。现在在复星,大家比较偏重的是案例学习,尤其复星内部的案例学习,大家把公司的每趟投资决策当成案例学习的最主要部分

譬如说过去自己出差,自己一个人拖着箱子就走;后来自家觉得多带几人,也是给大家一个协同学习的机会。因为你对那一个题目怎么看、怎么谈的,旁人又是怎么看的,那个都是学习。

现今商家的学习,肯定无法像在此以前那样。过去是等人家公司成功了,被斯坦福的上课发现,协会一个社团去写作,最终写好案例再拿来教大家。现在为主等这些历程达成,那个集团必然没戏了。因为一时发展太快了,当助教把公司的案例写好,那几个店铺曾经不是当年的不得了了。现在游人如织商高校还在用30年前的店堂案例,那有用吗?之所以,要爱戴的确的技艺进步、关切的确的商贸案例

还有就是复盘。把装有的小买卖案例复盘,那也是一种学习。此外复星周周的晨课,还有午餐分享和夜晚的享用、沟通,也都是上学。大家还有例外层次的栽培布置,像星冉、卓越、超过和领越,覆盖分裂等级的员工的就学须求。当然更着重的,我还直接强调要在工作中学习。

自我自己学怎么样?怎么学?

俺们做产业深度运营、整合和投资,很六人都会问我:你累不累?每个门类你都要看,去和社团调换。其实,这几个对自身来说,是很欣喜的业务——你见到了不一致的人、认识不一的东西、驾驭分歧的想法,这个都是读书。

更紧要的是,我以为还要学会思考。外人做这一个事、说这一个事的逻辑是什么样?没说出去的又是如何?逻辑又是怎么着?逻辑卓殊首要。并不是每个人心里想怎么就能说哪些、表明好。那不可以怪他,因为背后会有生意敏感性的难点;但没听懂,那就是您自己的题材。假设说真的没有听懂,那一定要愚公移山去听,还要去悟。

其它,我每一日会给协调留一点什么都不想的时光,哪怕每一日五分钟。就是静下来,哪怕盘腿做个冥想。我觉得那对我会很好,因为会放空一下团结;当然练个太极也很好,也有这几个作用

简单的说,一定要给协调留给空间去思考、去听、去看、去学学。越发是要去倾听竞争对手的想法、倾听客户的见地。当然有时候客户的看法并不见得一定是对的,所以都要去分析,能把客户的分别案例和数量相结合,那也是上学。

自身以为,我们那辈子最甜蜜的事务是生在了一个快速转移的时日。在这一个转变的一时里,有那么多艺人在演出,更何况我们还坐在前排,可以看得很明亮,可以向她们念书。

就此我们要享受那些时代,享受那种生活,享受大家可以穿梭去学学、升高。

正文来源:广昌看世界、湖畔大学,转发请留言得到授权,违者必究!

3 自定义空内容元素

出奇情况下,假诺空内容状态布局不满意急需时,可进行自定义
透过措施+ (instancetype)emptyViewWithCustomView:(UIView *)customView;
传播一个View 即可创造一个自定义的emptyView

self.tableView.ly_emptyView = [LYEmptyView emptyViewWithCustomView:customView];

example3.png

4 自定义元素的UI样式

此处自定义UI样式要求过多代码,别担心,在示范5中会讲解二次封装的章程,封装后调用时就只必要一行代码了
^ _ ^

  //初始化一个emptyView
  LYEmptyView *emptyView = [LYEmptyView emptyActionViewWithImageStr:@"noData"
                                                           titleStr:@"无数据"
                                                          detailStr:@"请稍后再试!"
                                                        btnTitleStr:@"重新加载"
                                                      btnClickBlock:^{}];
  //元素竖直方向的间距
  emptyView.subViewMargin = 20.f;
  //标题颜色
  emptyView.titleLabTextColor = MainColor(90, 180, 160);
  //描述颜色
  emptyView.detailLabTextColor = MainColor(180, 120, 90);
  //按钮背景色
  emptyView.actionBtnBackGroundColor = MainColor(90, 180, 160);

  //设置空内容占位图
  self.tableView.ly_emptyView = emptyView;

那里只列举了有些常用的习性,更加多属性请到LYEmptyView.h查看

example4.png

5 二次封装

第4小节的示范代码,修改emptyView的体制须求一个个特性单独去改,如果项目中各种界面都这么写就显得很麻烦,而且不易维护
解决办法是对库举行二次封装,二次封装后,对UI样式单独管理,方便维护

1)新建一个类继承自LYEmptyView,例如demo中的MyDIYEmpty
2)重写- (void)prepare 方法,并修改想要改变的要素的UI样式
- (void)prepare{
    [super prepare];

    self.titleLabFont = [UIFont systemFontOfSize:25];
    self.titleLabTextColor = MainColor(90, 180, 160);

    self.detailLabFont = [UIFont systemFontOfSize:17];
    self.detailLabTextColor = MainColor(180, 120, 90);
    self.detailLabMaxLines = 5;

    self.actionBtnBackGroundColor = MainColor(90, 180, 160);
    self.actionBtnTitleColor = [UIColor whiteColor];
}

操作上边的两步就可已毕对体制的单身管理
调用方法不变,只是调用的类成为了MYDiyEmpty

self.tableView.ly_emptyView = [MYDiyEmpty emptyActionViewWithImageStr:@"noData"
                                                             titleStr:@"暂无数据"
                                                            detailStr:@"请稍后再试!"
                                                          btnTitleStr:@"重新加载"
                                                        btnClickBlock:^{}];
3)进一步封装展现的因素内容,比如无数据状态图、无网络状态图

在MYDiyEmpty.h定义方法+ (instancetype)diyNoDataEmpty;
在MYDiyEmpty.m已毕方式

+ (instancetype)diyNoDataEmpty{
    return [MyDIYEmpty emptyViewWithImageStr:@"noData"
                                    titleStr:@"暂无数据"
                                   detailStr:@"请稍后再试!"];
}

通过3步包裹,自定义了UI样式,使管理更利于,使调用更简明
self.tableView.ly_emptyView = [MyDIYEmpty diyNoDataEmpty];


上面的两种示例,属于卓殊必要,须要四行代码搞定,调用和MJRefrsh类似,需求先安装样式,然后显示和潜伏

6 推迟展现emptyView

如示例1图,框架自动按照DataSource总计是还是不是显示emptyView,在空页面发起互连网请求时,DataSource肯定为空,会自动突显emptyView,有的产品要求可能不指望那样,希望提倡呼吁时临时隐藏emptyView。
本框架提供了八个方法可完结此必要,四个法子都是scrollView的归类,调用卓殊有利

 /**
   一般用于开始请求网络时调用,ly_startLoading调用时会暂时隐藏emptyView
   当调用ly_endLoading方法时,ly_endLoading方法内部会根据当前的tableView/collectionView的
   DataSource来自动判断是否显示emptyView
 */
- (void)ly_startLoading;

 /**
   在想要刷新emptyView状态时调用
   注意:ly_endLoading 的调用时机,有刷新UI的地方一定要等到刷新UI的方法之后调用,
   因为只有刷新了UI,view的DataSource才会更新,故调用此方法才能正确判断是否有内容。
 */
- (void)ly_endLoading;

*注意点:使用这些章程,请先将emptyView的autoShowEmptyView属性置为NO,关闭自动显隐

以下是调用示例(具体细节可参看demo中的demo2)

//1.先设置样式
self.tableView.ly_emptyView = [MyDIYEmpty diyNoDataEmpty];
//2.关闭自动显隐(此步可封装进自定义类中,相关调用就可省去这步)
self.tableView.ly_emptyView.autoShowEmptyView = NO;
//3.网络请求时调用
[self.tableView ly_startLoading];
//4.刷新UI时调用(保证在刷新UI后调用)
[self.tableView ly_endLoading];

example6.gif

7 突出须要,手动控制emptyView的显示隐藏

在少数特殊界面下,有的tableView/collectionView有稳定的一部分死多少,其它的数目按照互连网加载,那时按照上述的演示方法恐怕达不到那须要。
本框架提供其余的多少个主意来化解那么些难题。

/**
 手动调用显示emptyView
 */
- (void)ly_showEmptyView;

/**
 手动调用隐藏emptyView
 */
- (void)ly_hideEmptyView;

*注意点:使用那多个形式,请先将emptyView的autoShowEmptyView属性置为NO,关闭自动显隐

以下是调用示例(具体细节可参看demo中的demo4)

//1.先设置样式
self.tableView.ly_emptyView = [MyDIYEmpty diyNoDataEmpty];
//2.关闭自动显隐(此步可封装进自定义类中,相关调用就可省去这步)
self.tableView.ly_emptyView.autoShowEmptyView = NO;
//3.显示emptyView
[self.tableView ly_showEmptyView];
//4.隐藏emptyView
[self.tableView ly_hideEmptyView];

example7.gif

欢迎star
github地址:https://github.com/yangli-dev/LYEmptyView

Post Author: admin

发表评论

电子邮件地址不会被公开。 必填项已用*标注