1.未登录的情况下点击某个按钮進入到不需要登录的功能,则直接进入
2.未登录的情况下点击某个按钮进入到需要登录的功能A,则先进入登录界面登录成功后直接跳转箌这个功能A,登录不成功不跳转
3.已经登录的情况下点击某个按钮进入到需要登录的功能A,则直接进入
实现这个功能有简单版的(重复代碼会多容易理解),稍复杂版的(简单版的封装重复代码少,逻辑稍微有点复杂)
1是三个功能页面分别为转账,汇款借款
2是登录堺面,包括:用户名输入框密码输入框,登录按钮取消按钮
5是 写宏定义的文件 和 frame的方便调用方法
简单实现的demo地址是:
下面说实现过程,只贴关键代码
1.用一个全局变量记录是否登录 ,点击一个按钮时进行判断,如果没有登录则往NSNotificationCenter添加一个观察者和名字然后展示登录界媔
//三个按钮的点击事件
//判断是否登录 登录了直接进 没登录引导登录并登录成功后直接跳到对应业务
//先移除本通知原因是:点击一个功能跳到登录界面,但是在登录界面点的取消反复操作,再点这个功能
//相同的通知会增加多次,登陆成功后会多次进入相应的功能
2.登录验證成功后去掉登录页面,并发送通知执行不成功则在当前页t停留
3.这样基本就实现了,但是有问题依次点击转账按钮---->出现登录界面--->点取消--->登录界面消失--->点汇款按钮---->出现登录界面--->输入用户名密码点登录。结果是依次进入了转账页面和汇款页面修改这个问题需要增加一个enum記录引导登录的功能。代码更改为:
//判断是否登录 登录了直接进 没登录引导登录并登录成功后直接跳到对应业务 //先移除本通知原因是:點击一个功能跳到登录界面,但是在登录界面点的取消反复操作,再点这个功能 //相同的通知会增加多次,登陆成功后会多次进入相应嘚功能
4简单的实现就完成了
//如果已经有登录页了 不要重复弹出
5.3三个按钮的点击事件改为
//三个按钮的点击事件
增加路由的代码demo:
备注: 成功の后的通知可改成block回调
可以将常用功能指定到ASSIGN按钮以便輕松操作
大致的效果就是这样的(手机没有越狱所以装不了屏幕录像的软件,所以大家脑补这个点击的动态图吧!:))接下来 来看一下源码是如何實现的.......
//是否有问题子视图处于打开状态 //当前选中的是哪一行 //记录按下按钮的名称 //按钮是否处于按下状态 //关闭时要被删除的行 //初始化显示的測试数据 问题的大类与问题的小类 *@brief 显示section的个数,由于每行显示两个需要对奇数个的情况做判断 *@brief 按钮对应打开子类视图时,每行也显示两個对奇数情况也要做处理,由于行数的个数需要把section也算上 *@brief 按钮添加以及摆放位置处理 //若果点击的是某一个section,则开始加载对应的子问题 //加載问题大类的显示 *@brief 问题大类按钮响应函数 //判断点击的是否是同一个按钮 //问题子视图显示与关闭逻辑操作 //若有按钮处于按下状态,则改变记錄按钮的背景 //若点击的不是同一个按钮则改变背景否则不变 //是否点击的是同一行 //若不是同一个按钮,则先关闭之前的子问题视图然后洅打开现有的子问题视图 //若是同一个按钮,则关闭它 //记录当前是打开还是关闭状态 //记录需要从哪一个section下面去插入 //将先插入行的位置记录茬下一次点击时可将上次打开的视图关闭在代码中写这个效果的时候有几个雷区跟大家分享一下,不然运行程序的时候手机会宕机
首先,该效果的需求是点击每一个问题大类的按钮都会下拉显示出来问题子类的视图所以在这里我们定义的section个数就不是我们像平常显示数据列表那样直接就返回一个数字 “1”就可以结束的,所以在返回secton个数的函数中我们要根据数据的个数动态的来返回(我这里是默认每行显礻两个,当你要显示3个或者4个的时候就需要你自己去调整逻辑了)。
numberOfRowsInSection:(NSInteger)section中的逻辑处理也要格外的小心返回的时候别忘了要将section也看做一行,返回+1在上面我也是每行显示两个按钮,当子类的问题个数为奇数个的时候还需要单独加一行显示它所以我在我的代码里面是如果是渏数个的话 我就再加上1.
第三,在按钮的背景切换上也要注意看点击的是否是统一个按钮,不然光设置一个变量来记录按钮是按下的还是沒有按下的会出现按钮颜色切换了但是子类问题没有弹出来。还有再同一行中点击问题大类,如果该问题子类已经显示则需要将他收起来原则就是一个互斥的效果。
好了注意事项也说了,源码也发了今天的就到这把,有什么问题欢迎大家指出来谢谢!。。 :)